![](/img/trans.png)
[英]How does one convert a grayscale image to RGB in OpenCV (Python)?
[英]How to convert a grayscale image to heatmap image with Python OpenCV
我有一个(540, 960, 1)
形状的图像,其值范围为[0..255]
,即黑白。 我需要将其转换为“热图”表示。 例如, 255
像素的热量最高, 0
像素的热量最低。 其他介于两者之间。 我还需要将热图作为 Numpy 数组返回,以便稍后将它们合并到视频中。 有没有办法实现这一目标?
这里有两种方法,一种使用 Matplotlib,一种仅使用 OpenCV
方法#1: OpenCV
+ matplotlib.pyplot.get_cmap
为了实现灰度(1 通道) ->
热图(3 通道)转换,我们首先将图像作为灰度加载。 默认情况下,OpenCV 以 3 通道、8 位 BGR 的形式读取图像。 我们可以使用带有cv2.IMREAD_GRAYSCALE
参数的cv2.imread()
直接将图像加载为灰度图像,或者使用cv2.cvtColor()
将 BGR 图像转换为带有cv2.COLOR_BGR2GRAY
参数的灰度图像。 加载图像后,我们将这个灰度图像放入 Matplotlib 以获得我们的热图图像。 Matplotlib 返回 RGB 格式,因此我们必须转换回 Numpy 格式并切换到 BGR 色彩空间以与 OpenCV 一起使用。 这是一个使用科学红外摄像机图像作为inferno
颜色图输入的示例。 请参阅在 Matplotlib 中选择颜色图以了解可用的内置颜色图,具体取决于您所需的用例。
输入图像:
输出热图图像:
代码
import matplotlib.pyplot as plt
import numpy as np
import cv2
image = cv2.imread('frame.png', 0)
colormap = plt.get_cmap('inferno')
heatmap = (colormap(image) * 2**16).astype(np.uint16)[:,:,:3]
heatmap = cv2.cvtColor(heatmap, cv2.COLOR_RGB2BGR)
cv2.imshow('image', image)
cv2.imshow('heatmap', heatmap)
cv2.waitKey()
方法#2: cv2.applyColorMap()
我们可以使用 OpenCV 的内置热图函数。 这是使用cv2.COLORMAP_HOT
热图的结果
代码
import cv2
image = cv2.imread('frame.png', 0)
heatmap = cv2.applyColorMap(image, cv2.COLORMAP_HOT)
cv2.imshow('heatmap', heatmap)
cv2.waitKey()
注意:虽然 OpenCV 的内置实现简短快捷,但我建议使用方法 #1,因为有更大的颜色图选择。 Matplotlib 有数百种不同的颜色图,并允许您创建自己的自定义颜色图,而 OpenCV 只有 12 个可供选择。 这是内置的 OpenCV 颜色图选择:
您需要将图像转换为适当的灰度表示。 这可以通过几种方式完成,特别是使用imread(filename, cv2.IMREAD_GRAYSCALE)
。 这将图像的形状减少到(54,960)
(提示,没有三维)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.