OpenCV灰度转换给出意想不到的形状



我正在编写一个神经网络(CNN(,其中我提供图像作为网络的输入。我想将图像转换为灰度,以将图像的深度从 3 减少到 1。

我使用 OpenCV 函数进行转换,如下所示。

X = []
for name in cars:    
    img = cv2.imread(name,cv2.IMREAD_GRAYSCALE)
    X.append(img)
for name in non_cars:    
    img = cv2.imread(name,cv2.IMREAD_GRAYSCALE)
    X.append(img)

创建了X,它保存了我的数据用于训练目的。

每张图片为 64 x 64 x 3转换为灰度后,我应该得到 64 x 64 x 1。

打印出我的数组 X 的形状

print(X_train.shape[0], 'train samples')
Output - X_train shape: (15984, 64, 64)

15984是图像数量。我预计输出为 (15984, 64, 64,1(

我的神经网络给了我这个错误:

值错误:无法为形状为"(?, ?, ?, 3("的张量"image_input:0"提供形状 (64, 64, 64( 的值

请通过帮助指导我。

当您像在那里一样灰度加载图像时,如果您检查形状将是 (64,64(,当您添加和堆叠此图像时,您最终会得到 (15984, 64, 64(。使用(64,64(的图像表示可以看作是一个通道64×64像素的矩阵。如果需要添加缺少的通道轴,可以使用:

img = img[:,:,np.newaxis]

然后你最终会得到类似 (64,64,1( 的形状。

注意:您可以在 X_train 上执行相同的过程。有关此的更多信息,您可以查看numpy.expand_dims。

最新更新