2

我试图模仿这行代码的作用,使用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()

输出:Image([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 像素。

4

2 回答 2

4

我知道这个问题已经有一个公认的答案,但是,这意味着使用skimage库而不是imageio问题(和scipy)建议的那样。就这样吧。

根据imageio 关于从 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)

它对我有用。如果它不适合你,也许还有另一个问题。提供图像作为示例可能会有所帮助。

于 2018-07-04T13:00:11.640 回答
2

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)
于 2017-12-15T02:30:40.647 回答