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

时间:2016-03-31 12:51:19

标签: python opencv

我试图获取图片的红色通道颜色空间,目前我正在这样做,我得到一个grayscale图片:

img = img[:,:,2]

但我想要一个像这样的图像:

enter image description here

在上方,顶部图像是红色通道颜色空间图像,底部图像是原始图像。究竟是如何实现这一形象的?

我也试过

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

但获得的结果并不理想。这是关于红色通道颜色空间的文章:https://en.wikipedia.org/wiki/RG_color_space

2 个答案:

答案 0 :(得分:1)

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

img[:,:,0] = 0

但是您发布的示例图片并未说明,因为生成的图像在所有三个频道中都保留了信息。我的猜测是它是用" colormap"生成的,其中不同的颜色代表原始图像中不同的红色值。这样的映射可以以您喜欢的任何方式显示,因此从示例图像中重建它并不容易

答案 1 :(得分:1)

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

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

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)

enter image description here

以下是所有OpenCV的COLORMAP:

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']

使用cv2.LUT()使用自定义查找表映射颜色的示例:

table = np.array([( i * invert_value) for i in np.arange(256)]).astype("uint8")
cv2.LUT(image, table)