【问题标题】:How to convert a grayscale image to heatmap image with Python OpenCV如何使用 Python OpenCV 将灰度图像转换为热图图像
【发布时间】:2020-04-16 03:18:34
【问题描述】:

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

【问题讨论】:

    标签: python image opencv image-processing computer-vision


    【解决方案1】:

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

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

    为了实现灰度(1 通道)-> 热图(3 通道)转换,我们首先将图像加载为灰度。默认情况下,OpenCV 将图像读取为 3 通道、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 颜色图选择:

    【讨论】:

      【解决方案2】:

      您需要将图像转换为适当的灰度表示。这可以通过几种方式完成,尤其是使用imread(filename, cv2.IMREAD_GRAYSCALE)。这会将图像的形状缩小为(54,960)(提示,没有第三维)。

      【讨论】:

      • 那么如何转换成热图呢?
      • 二维数组本身就是一张热图。把它想象成 I(u,v) 是坐标 (u,v) 处的“热量”(强度)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 2019-10-16
      • 2023-04-06
      相关资源
      最近更新 更多