Python 如何获得图像的红色通道颜色空间?

Python 如何获得图像的红色通道颜色空间?,python,opencv,Python,Opencv,我正在尝试获取图像的红色通道颜色空间,目前我这样做的方式是,我得到一个灰度图像: img = img[:,:,2] 但我想要这样的图像: 上面,顶部图像是红色通道颜色空间图像,底部图像是原始图像。为了实现这一形象,到底在做什么 我也试过了 img[:,:,0] = 0 img[:,:,1] = 0 但所获得的结果并不理想。这里有一篇关于红色通道颜色空间的文章:你的第二个建议应该扔掉蓝色和绿色,给你一个“红色通道图像”。如果您想要RG(红绿)颜色空间图像,请仅丢弃蓝色通道: img[:,:,

我正在尝试获取图像的红色通道颜色空间,目前我这样做的方式是,我得到一个
灰度
图像:

img = img[:,:,2]
但我想要这样的图像:

上面,顶部图像是红色通道颜色空间图像,底部图像是原始图像。为了实现这一形象,到底在做什么

我也试过了

img[:,:,0] = 0
img[:,:,1] = 0

但所获得的结果并不理想。这里有一篇关于红色通道颜色空间的文章:

你的第二个建议应该扔掉蓝色和绿色,给你一个“红色通道图像”。如果您想要
RG
(红绿)颜色空间图像,请仅丢弃蓝色通道:

img[:,:,0] = 0

但您发布的示例图像并没有说明这一点,因为生成的图像在所有三个通道中都保留了信息。我的猜测是,它是用“彩色地图”制作的,在原始图像中,不同的颜色代表不同的红色值。这样的映射可以以任何方式显示,因此从示例图像重建它并不容易

实际上,预期的输出图像不是原始图像的红色通道颜色空间。这是一种应用于输入图像的颜色映射。好消息是OpenCV提供了多个内置的彩色贴图。坏消息是OpenCV内置的颜色映射无法生成预期的输出。但不要放弃,您可以使用自定义的查找表映射颜色

为了更好地演示,这里有一些图像示例:

img = cv2.imread('origin.png')
im_color = cv2.applyColorMap(img, cv2.COLORMAP_HSV)
cv2.imshow('mapped_image', im_color)
# cv2.imwrite('result.png', im_color)
cv2.waitKey(0)

以下是OpenCV的所有颜色贴图:

print [sub for sub in dir(cv2) if sub.startswith('COLORMAP_')]
['COLORMAP_AUTUMN', 'COLORMAP_BONE', 'COLORMAP_COOL', 'COLORMAP_HOT', 'COLORMAP_HSV', 'COLORMAP_JET', 'COLORMAP_OCEAN', 'COLORMAP_PINK', 'COLORMAP_RAINBOW', 'COLORMAP_SPRING', 'COLORMAP_SUMMER', 'COLORMAP_WINTER']
使用自定义查找表映射颜色的示例如下:


您可能只需要在原始BGR图像中将蓝色通道设置为0:
img[:,:,0]=0
我已经尝试过了,但结果与imgur链接中的结果非常不同。在我看来,被删除的颜色通道不是红色通道,而是绿色和蓝色的混合。我建议您在InkScape(或任何其他图片处理软件)中打开图像,并使用颜色级别。一旦你确定了正确的组合,删除提醒。我猜你的第一张图像也是用彩色地图计算出来的。你从哪里得到的第一张照片?太好了。但是
cv2.LUT()
会给我一个数组,我应该不构造一个颜色映射还是什么?如果没有,那么
cv2.LUT()
?@stack的输出数组有什么用处?每个图像都是一个数组:-),但您需要将其转换为适当的类型,以便能够通过OpenCV识别为图像。让我用一个例子来更新答案。@stack还请注意,您可能需要对其中一个内置的
COLORMAP
s的结果进行一些处理,以便将其转换为您期望的结果。
table = np.array([( i * invert_value) for i in np.arange(256)]).astype("uint8")
cv2.LUT(image, table)