首页 > 解决方案 > 将 3D 数组图像转换为 2D 数组

问题描述

我正在尝试通过导入图像。我的from tensorflow.keras.preprocessing import image图像是我写在纸上的手写数字,然后我通过手机从中拍摄了一张照片,然后将其尺寸更改为 28*28:

手写数字 7

我使用了以下代码:

img_width, img_height = 28, 28
img = image.load_img('rgb_seven.jpeg', target_size=(img_width, img_height))
img_tensor = image.img_to_array(img)
img_tensor.shape

形状结果是:

(28, 28, 3)

似乎图像被加载为3D 数组。我需要一个二维数组,所以我这样做:

x_image = img_tensor.reshape(len(img_tensor),-1)
x_image.shape

结果是:

(28, 84)

为什么是84?我需要 28,因为我想将其展平以作为输入层插入。

什么是问题?

标签: pythonpython-3.xtensorflowkerasdeep-learning

解决方案


您应该使用加载图像color_mode='grayscale'

img = image.load_img('rgb_seven.jpeg', color_mode='grayscale', target_size=(img_width, img_height))

它会给你形状(28, 28, 1)

然后使用x_image = img_tensor.reshape(28, 28)会给你形状(28, 28)

你得到形状的原因(28, 84)是因为reshape()不会删除维度,所以如果你想用它img_tensor.reshape(28,-1)来重塑数组,(28, 28, 3)它将返回一个数组作为组合最后两个维度,因此你得到形状(28, 28 * 3)


推荐阅读