无法将大小为 12288 的数组重塑为形状 (64,64)

数据挖掘 麻木的 图像预处理
2021-10-06 05:02:24

我有一张使用该image.load_img()功能加载的图像,但是当我尝试对其进行重塑时,出现此错误:

ValueError: cannot reshape array of size 12288 into shape (64,64)

这是我的代码:

test_image = image.load_img('xray_dataset_covid19/test/PNEUMONIA/streptococcus-pneumoniae-pneumonia-temporal-evolution-1-day2.jpg'
                            , target_size = (64, 64))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = model.predict(test_image)
if result[0][0] == 1:
    img = Image.fromarray(test_image.reshape(64,64) ,'L')
    img.show() 
2个回答

64×64=4096. 你很短8000 像素。

当我 print(test_image.shape) 我得到 (1, 64, 64, 3)

你可能想要的是:

if result[0][0] == 1:
    img = Image.fromarray(test_image.reshape(64,64,3))
    img.show()

即指定,3, 因为您有 RGB 数据,并删除 ,,'L'因为这意味着您有黑白数据。

如果您真的想要灰度或黑白,请将最后一行更改为以下之一:

img.convert('L').show()
img.convert('1').show()

退一步说,你可以test_image直接使用,不需要重塑它,除非它是在一批大小为 1 的情况下。处理它的更好方法是,不必明确说明图像尺寸,是:

if result[0][0] == 1:
    img = Image.fromarray(test_image.squeeze(0))
    img.show()

squeeze()删除任何尺寸为 1 的尺寸;squeeze(0)通过更具体来避免意外:如果第一个维度的大小为 1,则将其删除,否则什么也不做。

另一种与您的使用方式相关的方法result是:

if result[0][0] == 1:
    img = Image.fromarray(test_image[0])
    img.show()