从RGB图像中提取单独的通道的方法

6

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

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

or

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

起始图像 = 输入图像描述 提取的红色通道 = 输入图像描述

这是正确的提取吗? 完整的红色通道 - img在哪里?


1
分离通道只是灰度图像。它们通常不包含颜色。您可以以各种方式对其进行着色。请参见下面的答案。 - fmw42
2个回答

7
提取出来的红色通道看起来像是一张灰度图像,但是它是正确的。它只是一个在区间 [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


2
无论哪种方法,您都会创建一个灰度图像,因此绘制它不会显示其来源通道的颜色。
您可以使用色图将颜色添加到要显示的图像中,或通过将其他通道设置为0来将其转换为RGB图像。
"最初的回答"
plt.imshow(r, cmap='Reds')

或者

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接