我试图获取图片的红色通道颜色空间,目前我正在这样做,我得到一个grayscale
图片:
img = img[:,:,2]
但我想要一个像这样的图像:
在上方,顶部图像是红色通道颜色空间图像,底部图像是原始图像。究竟是如何实现这一形象的?
我也试过
img[:,:,0] = 0
img[:,:,1] = 0
但获得的结果并不理想。这是关于红色通道颜色空间的文章:https://en.wikipedia.org/wiki/RG_color_space
答案 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)
以下是所有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)