如何从RGB图像中提取单个通道

时间:2019-08-07 16:20:31

标签: python image opencv image-processing signal-processing

我发现opencv文档使用cv2.split(img)命令从RGB图像中提取单个通道,但是它并没有真正返回所选通道的图像。它们看起来都像灰度。有人能帮我吗?我附上照片。

b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]

or

b,g,r = cv2.split(img)

起始图片= enter image description here 红色通道已提取= enter image description here

提取正确吗? 红色全频道在哪里-img?

2 个答案:

答案 0 :(得分:1)

在这两种方法中,您都是在创建灰度图像,因此对其进行绘制将不会显示其来源通道的颜色。

您可以使用颜色图为显示的图像添加颜色,也可以通过将其他通道设置为0将其转换为RGB图像。

plt.imshow(r, cmap='Reds')

OR

img = np.stack([r, np.zeros_like(r), np.zeros_like(r)], axis=-1)
plt.imshow(img)

答案 1 :(得分:1)

提取的红色通道可能看起来像灰度图像,但它是正确的。它只是一个二维数组,其值在[0,255]范围内。要可视化特定通道,您需要将其他通道设置为零。因此,要显示红色通道,需要将蓝色和绿色通道设置为零。

import cv2

img = cv2.imread('1.jpg')

# Set blue and green channels to 0
img[:,:,0] = 0
img[:,:,1] = 0

cv2.imshow('red_img', img)
cv2.waitKey()

enter image description here