图像塑造问题:三维图像

Image Shaping Issues: Three dimensional image

我有一张长和宽为 7 x 5 的图像,但图像的形状显然是 (7,5,3)。

当我将图像调整为 28 x 28 时,形状变为 (28, 28, 3)。 我需要形状 be (1, 28, 28),但我不知道该怎么做。

image = cv2.imread(importedImage)
image = cv2.resize(image, (28, 28))
image = img_to_array(image)
image = np.array(image, dtype="float32")/ 255.0

print(image)


q = loaded_model.predict(np.array([image]))[0]

整形似乎没有帮助。

图像的打印版本是:

[[[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]
  ...
  [1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]
  ...
  [1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]
  ...
  [1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 ...

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]
  ...
  [1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]
  ...
  [1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]
  ...
  [1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]]
  ...
  [1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]
  ...
  [1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]]

错误是:ValueError:检查输入时出错:预期 flatten_1_input 有 3 个维度,但得到的数组形状为 (1, 28, 28, 3)

那个额外的维度(3)是因为 OpenCV(和大多数其他处理图像的包)为红色、绿色和蓝色保留单独的颜色通道。 (OpenCV 将它们排序为蓝色、绿色、红色。)有些图像有一个 "alpha" 通道,在这种情况下你会看到 (height, width, 4).

将三个颜色通道合为一个灰度通道即可得到(高,宽,1)

image = cv2.imread(importedImage)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
resized = cv2.resize(gray, (28, 28))

应该让您接近您的需要。