请看这个github page。我想使用Python PIL,open cv或matplotlib库以这种方式生成热图。有人可以帮我搞清楚吗?
我可以为我的网络创建一个与输入相同大小的热图,但我无法叠加它们。热图形状为(800,800),基本图像形状为(800,800,3)
您可以使用OpenCV中提供的cv2.addweighted()
函数在图像上叠加热图。
这是一个例子
img = cv2.imread('Sample.jpg', 1)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
heatmap_img = cv2.applyColorMap(gray_img, cv2.COLORMAP_JET)
现在,如果要将其叠加在原始图像的顶部,可以使用cv2.addweighted()
函数
fin = cv2.addWeighted(heatmap_img, 0.7, img, 0.3, 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()函数获取给定框架的头图;
我发现了一些有关此主题的有趣免费视频: