Python 为图像再添加一个通道

Has*_*zan 3 python opencv python-2.7 keras tensorflow

由于以下错误,我正在尝试添加频道

ValueError:无法将输入数组从形状 (48,48) 广播到形状 (48,48,1)

代码:

img = cv2.imread(f,0)
resized = cv2.resize(img, (48,48), interpolation = cv2.INTER_AREA)
print(resized.shape) 
(48, 48)
Run Code Online (Sandbox Code Playgroud)

但我需要像 (48,48,1) 这样的通道图像。

我该如何解决这个问题?

Adi*_*tya 8

y = np.expand_dims(x, axis=-1)  # Equivalent to x[:,:,np.newaxis]
Run Code Online (Sandbox Code Playgroud)

正如函数所说,它将添加一个额外的维度作为新的最后一个通道

编辑

  • 轴将是 -1 而不是 1

  • 这是不正确的,它返回形状“(48, 1, 48)”。您的意思是“axis=-1”吗? (2认同)

小智 3

您可以通过使用拆分和合并操作来做到这一点:

首先,使用 split 将 2 通道图像分成两个数组。然后,分别创建为您提供第三个通道的数组。最后,合并三个数组得到一个3通道Mat。

这是一个例子:

c1,c2 = cv2.split(img)
merged = cv2.merge((c1,c2,arr))
Run Code Online (Sandbox Code Playgroud)

其中 img 是 2 通道图像,arr 是包含要添加的通道的数组,合并图像包含合并的三个通道。