OpenCV灰度转换提供意想不到的形状

时间:2018-04-12 09:33:46

标签: python-3.x opencv

我正在编程一个神经网络(CNN),我在那里提供图像作为网络的输入。 我想把图像Ccovert变成灰度,将图像的深度从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乘64乘3 转换为灰度后,我应该得到64乘64比1。

打印出我的阵列X的形状

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

15984是图像数量。 我期待输出为(15984,64,64,1)

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

ValueError:无法为Tensor'image_input:0'提供形状值(64,64,64),其形状为'(?,?,?,3)'

请指导我帮助。

1 个答案:

答案 0 :(得分:1)

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

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

然后你会得到像(64,64,1)那样的形状。

注意:您可以在X_train上执行相同的操作。有关详情,请查看numpy.expand_dims