我正在尝试获取图像的红色通道颜色空间,目前我正在这样做,我得到一个grayscale图像:
img = img[:,:,2]
Run Code Online (Sandbox Code Playgroud)
但我想要一个像这样的图像:
上图,顶部图像是红色通道颜色空间图像,底部图像是原始图像.究竟是如何实现这一形象的呢?
我也试过了
img[:,:,0] = 0
img[:,:,1] = 0
Run Code Online (Sandbox Code Playgroud)
但获得的结果并不理想.这是一篇关于红色通道颜色空间的文章:https://en.wikipedia.org/wiki/RG_color_space
实际上,您期望的输出图像不是原始图像的红色通道颜色空间。它是一种应用于输入图像的色彩映射表。好消息是 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)
Run Code Online (Sandbox Code Playgroud)
以下是 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']
Run Code Online (Sandbox Code Playgroud)
使用自定义查找表映射颜色的示例cv2.LUT():
table = np.array([( i * invert_value) for i in np.arange(256)]).astype("uint8")
cv2.LUT(image, table)
Run Code Online (Sandbox Code Playgroud)