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

问题描述 投票:6回答:2

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

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

opencv python-imaging-library heatmap
2个回答
7
投票

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

这是一个例子

Sample image:

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

enter image description here

Heatmap:

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

enter image description here

Superimposed:

现在,如果要将其叠加在原始图像的顶部,可以使用cv2.addweighted()函数

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

enter image description here

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


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

© www.soinside.com 2019 - 2024. All rights reserved.