web-dev-qa-db-ja.com

ヒートマップをベース画像に重ね合わせる方法は?

github page をご覧ください。 Python PIL、open cvまたはmatplotlibライブラリを使用して、この方法でヒートマップを生成したい。誰かがそれを理解するのを手伝ってくれる? Superimposed heatmaps

入力と同じサイズでネットワークのヒートマップを作成できましたが、それらを重ね合わせることができません。ヒートマップの形状は(800,800)で、ベース画像の形状は(800,800,3)です。

10
curio1729

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

両方の画像の関数で重みパラメータを変更できます。

8
Jeru Luke

私のコードは、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()関数は、指定されたフレームでヘッドマップを取得します。

このトピックに関する興味深い無料動画をいくつか見つけました。

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

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