numpy数组中的大索引产生错误

时间:2018-06-09 20:21:03

标签: python numpy image-processing scipy

我有一个文件夹列车,其中有13000个动物图像。我想用深层神经网络来训练它们。但是图像的大小不同,所以我运行以下代码来获得一个numpy数组X.

for i in range(m):
  my_image = "Img-"+str(i+1)+".jpg"
  fname = "train/train/"+my_image
  image = plt.imread(fname)
  X[i] = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((1, num_px*num_px*3))

这适用于m到1000的值。但是当m = 13000时,我的训练集的大小,它会给出以下错误

ValueError                                Traceback (most recent call last)
<ipython-input-41-c214b5b43e33> in <module>()
      3     fname = "train/train/"+my_image
      4     image = plt.imread(fname)
----> 5     X[i] = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((1, num_px*num_px*3))
ValueError: cannot reshape array of size 40000 into shape (1,120000)

这里的imresize()是将图像大小调整为所需的大小。我的num_px值是256。 任何帮助都会非常值得关注

1 个答案:

答案 0 :(得分:0)

您的一张图片是灰度图片,而不是RGB图片。 请注意help(plt.imread)说(我的重点):

  

返回值为numpy.array对于灰度图像,   返回数组是MxN 。对于RGB图像,返回值为MxNx3。

scipy.misc.imresize(image, size=(num_px,num_px)) 返回形状(num_px,num_px)的数组,而不是(num_px,num_px,3)。 因此,数组不能重新形成(1, num_px*num_px*3)

(请注意,40000正好是120000的三分之一。)

要将所有图像转换为RGB,您可以使用:

from PIL import Image
for i in range(m):
    my_image = "Img-"+str(i+1)+".jpg"
    fname = "train/train/"+my_image
    img = np.asarray(Image.open(fname).convert('RGB'))
    X[i] = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((1, num_px*num_px*3))

为了面向未来的代码,请注意help(scipy.misc.imresize)说(我的重点):

  

imresize在SciPy 1.0.0中已弃用,将在1.2.0中删除。   使用skimage.transform.resize代替