gpt4 book ai didi

python - 如何使用 Python OpenCV 将灰度图像转换为热图图像

转载 作者:太空宇宙 更新时间:2023-11-03 19:57:08 24 4
gpt4 key购买 nike

我有一个 (540, 960, 1) 形状的图像,其值范围为 [0..255],为黑白图像。我需要将其转换为“热图”表示形式。例如,具有 255 的像素应该是热量最多的像素,而具有 0 的像素应该是热量最少的。其他人则介于两者之间。我还需要将热图作为 Numpy 数组返回,以便稍后将它们合并到视频中。有办法实现这一点吗?

最佳答案

这里有两种方法,一种使用 Matplotlib,一种仅使用 OpenCV

方法#1: OpenCV + matplotlib.pyplot.get_cmap

要实现灰度(1 channel )-> 热图(3 channel )转换,我们首先将图像加载为灰度。默认情况下,OpenCV 将图像读取为 3 channel 、8 位 BGR。我们可以使用 cv2.imread() 直接以灰度形式加载图像与 cv2.IMREAD_GRAYSCALE 参数或使用 cv2.cvtColor()使用 cv2.COLOR_BGR2GRAY 参数将 BGR 图像转换为灰度图像。加载图像后,我们将此灰度图像放入 Matplotlib 中以获得热图图像。 Matplotlib 返回 RGB 格式,因此我们必须转换回 Numpy 格式并切换到 BGR 色彩空间以便与 OpenCV 一起使用。下面是一个使用科学红外相机图像作为 inferno 颜色图输入的示例。请参阅choosing color maps in 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 有 hundreds of various colormaps并允许您create your own custom color maps而OpenCV只有12个可供选择。这是内置的 OpenCV 颜色图选择:

关于python - 如何使用 Python OpenCV 将灰度图像转换为热图图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59478962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com