OpenCV 灰度图像具有形状 (H,W) 但我需要 (H,W,1) 用于 Tensorflow

OpenCV grayscale image has shape (H,W) but I need (H,W,1) for Tensorflow

我使用此命令将打开的 cv 图像从 RGB 转换为灰度:

img = cv2.cvtColor(np.float32(img), cv2.COLOR_BGR2GRAY)  # Grayscale image

打印此命令之前的形状 returns 以下内容:

(64, 128, 3)

以及灰度函数后:

(64, 128)

不过应该是这样的:

(64, 128, 1)

任何人都可以解释这里发生了什么以及我如何才能将我的图像设置为正确的格式?因为如果我将此图像传递给 Tensorflow,由于输入形状错误,它会给我一个错误。 Tensorflow 需要具有以下格式(宽度、高度、通道)的图像。 Channels 对于 rgb 为 3,对于灰度为 1。然而,就我而言,转换为灰度后我没有任何通道。而且我不知道为什么

输入图像有 3 个通道,但灰度只有一个通道。

import cv2
img = cv2.imread("HHH.jpg")
print(f"img.shape={img.shape}")
gray = cv2.cvtColor(np.float32(img), cv2.COLOR_BGR2GRAY)  # Grayscale image
print(f"gray.shape={gray.shape}")

输出:

img.shape=(960, 1280, 3)
gray.shape=(960, 1280)

如果您需要将 (H, W, 1) 维度的图像提供给 TensorFlow,请通过 扩展维度 在 TF 中更改您的维度: 此代码向数据的最后一维添加一个通道:

 tf.expand_dims(image, -1).shape.as_list()