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)
_
両方の画像の関数で重みパラメータを変更できます。
私のコードは、opencvを介して、frameと呼ばれる元の画像に適用されるcamと呼ばれるヒートマップマトリックス(224,224)から始まります。
そしてそれはかなりうまくいくようです:
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()関数は、指定されたフレームでヘッドマップを取得します。
このトピックに関する興味深い無料動画をいくつか見つけました。