web-dev-qa-db-fra.com

Numpy aplatir la matrice d'images RVB

J'ai 1000 images RVB (64X64) que je veux convertir en un tableau (m, n).

J'utilise ceci:

import numpy as np
from skdata.mnist.views import OfficialImageClassification
from matplotlib import pyplot as plt
from PIL import Image                                                            
import glob
import cv2

x_data = np.array( [np.array(cv2.imread(imagePath[i])) for i in range(len(imagePath))] )
print x_data.shape

Ce qui me donne: (1000, 64, 64, 3)

Maintenant, si je le fais:

pixels = x_data.flatten()
print pixels.shape

Je reçois: (12288000,)

Cependant, j'ai besoin d'un tableau avec ces dimensions: (1000, 12288)

Comment puis-je y parvenir?

16
apples-oranges

Appliquez la méthode numpy reshape() après avoir appliqué flatten() au tableau aplati:

  x_data = np.array( [np.array(cv2.imread(imagePath[i])) for i in range(len(imagePath))] )

  pixels = x_data.flatten().reshape(1000, 12288)
  print pixels.shape
6
Ray

Essaye ça:

d1, d2, d3, d4 = x_data.shape

puis en utilisant numpy.reshape()

x_data_reshaped = x_data.reshape((d1, d2*d3*d4))

ou

x_data_reshaped = x_data.reshape((d1, -1))

(Numpy déduit la valeur au lieu de -1 De la longueur d'origine et de la dimension définie d1)

5
lskrinjar

Vous pouvez parcourir votre tableau d'images et aplatir chaque ligne indépendamment.

numImages = x_data.shape[0]
flattened = np.array([x_data[i].flatten() for i in range(0,numImages)])
3
James Evans