如何在基本图像上叠加热图?

时间:2017-09-03 06:30:53

标签: opencv python-imaging-library heatmap

请查看此github page。我想使用Python PIL,open cv或matplotlib库以这种方式生成热图。有人可以帮我搞清楚吗? Superimposed heatmaps

我可以为我的网络创建一个与输入相同大小的热图,但我无法叠加它们。热图形状为(800,800),基本图像形状为(800,800,3)

2 个答案:

答案 0 :(得分:6)

您可以使用OpenCV中提供的函数cv2.addweighted()在图像上叠加热图。

这是一个例子

示例图片:

img = cv2.imread('Sample.jpg', 1)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

enter image description here

热图:

heatmap_img = cv2.applyColorMap(gray_img, cv2.COLORMAP_JET)

enter image description here

叠加:

现在,如果您想将其叠加在原始图像的顶部,可以使用cv2.addweighted()功能

fin = cv2.addWeighted(heatmap_img, 0.7, img, 0.3, 0)

enter image description here

您可以更改两个图像的功能中的重量参数。

答案 1 :(得分:0)

我的代码从称为cam的热图矩阵(224,224)开始,该矩阵通过opencv应用于称为frame的原始图像;

看起来效果很好:

import numpy as np
from cv2 import cv2
from skimage import exposure 
...

capture = cv2.VideoCapture(...)
while True:
    ret, frame = capture.read()

    if ret:
        #resize original frame
        frame = cv2.resize(frame, (224, 224)) 

        #get color map
        cam = getMap(frame)
        map_img = exposure.rescale_intensity(cam, out_range=(0, 255))
        map_img = np.uint8(map_img)
        heatmap_img = cv2.applyColorMap(map_img, cv2.COLORMAP_JET)

        #merge map and frame
        fin = cv2.addWeighted(heatmap_img, 0.5, frame, 0.5, 0)

        #show result
        cv2.imshow('frame', fin)

getMap()函数获取给定框架的头部地图;

我找到了一些有趣的有关该主题的免费视频:

https://www.youtube.com/watch?v=vTY58-51XZA&t=14s

https://www.youtube.com/watch?v=4v9usdvGU50&t=208s