Numpy展平RGB图像阵列

app*_*ges 16 python arrays numpy image-processing

我有1000个RGB图像(64X64),我想将其转换为(m,n)数组.

我用这个:

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
Run Code Online (Sandbox Code Playgroud)

这给了我: (1000, 64, 64, 3)

如果我这样做:

pixels = x_data.flatten()
print pixels.shape
Run Code Online (Sandbox Code Playgroud)

我明白了: (12288000,)

但是,我需要一个具有以下尺寸的数组: (1000, 12288)

我怎样才能做到这一点?

Ray*_*Ray 6

reshape()在应用于展flatten()平数组后应用numpy方法:

  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
Run Code Online (Sandbox Code Playgroud)

  • `Flatten()`和`reshape()`是无损的.结果数组的维数应始终乘以相同的总和.Flatten有一个`shape()`作为一维数组,而不是一个nD数组,因此它的形状没有第二个值.它看起来像`array([1,2,3,])`.形状(3,1)数组的nD看起来像`array([[1],[2],[3]])`. (2认同)
  • @apples-oranges 另外,根据您在做什么,您可能只想直接“重塑”原始数据——展平创建您可能不需要的数据的重组副本。`x_data.reshape(1000, 12288)` (2认同)

lsk*_*jar 5

试试这个:

d1, d2, d3, d4 = x_data.shape
Run Code Online (Sandbox Code Playgroud)

然后使用 numpy.reshape()

x_data_reshaped = x_data.reshape((d1, d2*d3*d4))
Run Code Online (Sandbox Code Playgroud)

要么

x_data_reshaped = x_data.reshape((d1, -1))
Run Code Online (Sandbox Code Playgroud)

(Numpy推断出值而不是-1原始长度和定义的维度d1)