无法使用imageio重塑数组。为什么?

时间:2017-12-14 21:27:50

标签: python python-imageio

我正在尝试使用imageio模仿这行代码的作用:

img_array = scipy.misc.imread('/Users/user/Desktop/IMG_5.png', flatten=True)
img_data  = 255.0 - img_array.reshape(784)`

然而,在使用imageio时,我得到了:

img = imageio.imread('/Users/user/Desktop/IMG_5.png')
img.flatten()

输出:图像([212,211,209,...,192,190,191],dtype = uint8)

img.reshape(1, 784)
ValueError: cannot reshape array of size 2352 into shape (1,784)

有人可以解释这里发生了什么,为什么我的图片大小为2352?我在导入之前将图像调整为28x28像素。

2 个答案:

答案 0 :(得分:2)

我知道这个问题已经有了一个可以接受的答案,但是,这意味着要使用skimage库而不是imageio(和scipy)建议。这样就可以了。

根据imageio's doc on translating from scipy,,您应将flatten参数改为as_gray

所以这行:

img_array = scipy.misc.imread('/Users/user/Desktop/IMG_5.png', flatten=True)

应该给您以下相同的结果:

img_array = imageio.imread('/Users/user/Desktop/IMG_5.png', as_gray=True)

对我有用。如果对您不起作用,则可能还有另一个问题。提供图像作为示例可能会有所帮助。

答案 1 :(得分:1)

RGB图像有三个通道,因此三个784像素是2352.您不应该将img.flatten()的结果保存在变量中吗? img_flat = img.flatten()。如果你这样做,你应该将三个颜色层展平为一个灰度图层,然后你可以重塑它。

编辑:以与你使用弃用的scipy相同的方式使用skimage可能会更容易:

from skimage import transform,io
# read in grey-scale
grey = io.imread('your_image.png', as_grey=True)
# resize to 28x28
small_grey = transform.resize(grey, (28,28), mode='symmetric', preserve_range=True)
# reshape to (1,784)
reshape_img = small_grey.reshape(1, 784)