在numpy数组中存储不同维度的图像

时间:2017-03-12 19:20:27

标签: python arrays numpy deep-learning conv-neural-network

我有两张图片,尺寸为图像1(32,43,3),尺寸为图像2(67,86,3)。我怎么能把这个存储在一个numpy数组中,每当我尝试追加数组

image=cv2.imread(image1,0)
image=cv2.resize(image,(32,43))
x_train=np.array(image.flatten())
x_train=x_train.reshape(-1,3,32,43)
X_train =np.append(X_train,x_train) #X_train is my array

image=cv2.imread(image2,0)
image=cv2.resize(image,(67,86))
x_train=np.array(image.flatten())
x_train=x_train.reshape(-1,3,67,86)
X_train =np.append(X_train,x_train) 

Value Error: total size of new array must be unchanged.

我想要X_train的形状(-1,深度,高度,宽度)。所以我可以将它喂入我的神经网络。有没有办法在阵列中存储不同维度的图像并将其输入神经网络?

1 个答案:

答案 0 :(得分:3)

请勿使用np.append。如果必须加入数组,请从np.concatenate开始。它会迫使你更加注意尺寸的兼容性。

你不能加入2个带有形状(32,43,3)(67,86,3)的数组来制作一个更大的一些兼容形状的数组。他们共享的唯一维度是最后一个维度。

这些重塑也没有意义:( - 1,3,32,43),( - 1,3,67,86)。

它有效,但它也会弄乱'形象'。您不只是添加第四维。看起来你想做一些轴交换或转置。练习一些小阵列,这样你就可以看到发生了什么,例如: (2,4,3)。

您期望Xtrain的最终形状是什么?

您可以将这两个图像放在一个对象dtype数组中,这与列表[image1, image2]基本相同。但我怀疑你的神经网络是否可以做任何实用的事情。

如果将(32,43,3)数组重新形成为(16,86,3),则可以在轴= 0上连接(67,86,3)以生成(83,86,3)数组。如果您需要先3,我会使用np.transpose(..., (2,0,1))

反过来重塑(67,86,3)至(2 * 67,43,3)。

将(32,43,3)传递给(32,86,3)是另一种选择。

将它们加入新的第4维度,要求“行”的数量以及“列”的数量匹配。