调整引用另一个数组的numpy数组的大小

时间:2018-08-15 12:08:17

标签: python arrays numpy opencv

6408

在上面的代码中,我首先使用opencv加载图像,然后在第二个块中调整大小并更改其颜色空间。

我的批量大小为101*101*3,图像尺寸为train_img.shape 当我做(6408,)时,我得到train_img[i].shape;当我101*101*3时,我得到6408*101*101*3,因此,我无法训练我的神经网络模型,因此,我想要的维度是{{ 1}}

我尝试使用此train_img.resize(6408,101,101,3)重塑,我得到了ValueError: cannot resize an array that references or is referenced by another array in this way. Use the resize function

并且在使模型适合我时出现此错误Error when checking input: expected conv2d_3_input to have 4 dimensions, but got array with shape (6408, 1)

我想知道是否可以使用当前用于加载图像的方法更改输入的尺寸。

1 个答案:

答案 0 :(得分:1)

您不应在此处使用dtype=object。 OpenCV仍会创建ndarray图像。

这是您的代码的更正版本:

mypath='/Users/sachal/Desktop/data_raw/normal_1/images'
onlyfiles = [ f for f in os.listdir(mypath) if os.path.isfile(join(mypath,f)) ]
images = []

for file in onlyfiles:
   img = cv2.imread(os.path.join(mypath,file))
   resized_img = cv2.resize(img, (101, 101)) 
   yuv_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2YUV)
   images.append(yuv_img.reshape(1, 101, 101, 3))

train_img = np.concatenate(images, axis=0)
print(train_img.shape)

在循环中,加载每个图像,调整其大小,将其转换为YUV,然后将其放入列表中。在循环的最后,您的列表包含所有训练图像。您可以将其传递给np.concatenate来创建ndarray