无法将大小为921600的数组重塑为形状(1,128,128,1)

时间:2018-11-05 17:23:36

标签: python python-3.x opencv keras

我将图像作为来自用户的表单输入,然后尝试将其大小调整为(1,128,128,1),但是 ValueError: cannot reshape array of size 921600 into shape (1,128,128,1)

以下是拍摄图像的片段,然后将其调整为(1,128,128,1)-

def predit():
   im = Image.open(request.files['image'])
   image_data = np.asarray(im)
   input_img_flatten = cv2.resize(image_data,(128,128)).flatten()
   im2arr = np.reshape(input_img_flatten,(1,128,128,1))
   return str(np.argmax(model.predict(im2arr)))

当我不使用输入图像作为表单输入而是仅使用以下方法从桌面打开它时,我的代码即可正确运行。

model = load_model('./latest.hdf5')
img = cv2.imread('/Users/swastik/thapar/test/test2.jpg',0)
input_img_flatten = cv2.resize(img,(128,128).flatten()
im2arr = np.array(input_img_flatten).reshape((1, 128, 128, 1)) 
print(np.argmax(model.predict(im2arr)))

如何做到?

我已经看到了这个答案Getting error: Cannot reshape array of size 122304 into shape (52,28,28),但是操作者没有接受任何答案,甚至我也无法正确理解给定的解决方案。

完整代码-

from keras.models import load_model
from PIL import Image
import numpy as np
import cv2

model = load_model('./latest.hdf5')
im = Image.open('Anyimageinyourfolder.jpg')
image_data = np.asarray(im)
input_img_flatten = cv2.resize(image_data,(128,128)).flatten()
im2arr = np.array(input_img_flatten).reshape((1, 128, 128, 1))
print(np.argmax(model.predict(im2arr)))

1 个答案:

答案 0 :(得分:0)

很难说出是什么原因导致了您的问题。假设图像与您的示例一样是灰度(单色通道),则此代码可能会有所帮助:

img = cv2.imread('messi5.jpg', cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (128,128))
img = img[np.newaxis,:,:,np.newaxis]
print(img.shape)
>>> (1, 128, 128, 1)

此外,如果您仅预测一张图像,则仍需要对返回的预测进行索引,例如:print(np.argmax(model.predict(img)[0]))

希望这会有所帮助