Python中繪制場景熱力圖


原文地址:https://www.cnblogs.com/taotingz/p/11309333.html

我們在做諸如人群密集度等可視化的時候,可能會考慮使用熱力圖,在Python中能很方便地繪制熱力圖。

下面以識別圖片中的行人,並繪制熱力圖為例進行講解。

步驟1:首先識別圖像中的人,得到bounding box的中心坐標。識別方法多樣化,坐標也可以自己定義。

步驟2:將所有中心坐標放入一個list類型的變量data中,即data = [[x1,y1] [x2,y2] …]

步驟3:繪制熱力圖,並將熱力圖加權疊加到原圖上。

 

需要import的包:

import cv2
import numpy as np
from PIL import Image
from pyheatmap.heatmap import HeatMap
import matplotlib.pyplot as plt

根據識別的結果得到data的值,傳入以下apply_heatmap(image,data)繪制熱力圖;

復制代碼
def apply_heatmap(image,data):
    '''image是原圖,data是坐標'''
    '''創建一個新的與原圖大小一致的圖像,color為0背景為黑色。這里這樣做是因為在繪制熱力圖的時候如果不選擇背景圖,畫出來的圖與原圖大小不一致(根據點的坐標來的),導致無法對熱力圖和原圖進行加權疊加,因此,這里我新建了一張背景圖。'''
    background = Image.new("RGB", (image.shape[1], image.shape[0]), color=0)
    # 開始繪制熱度圖
    hm = HeatMap(data)
    hit_img = hm.heatmap(base=background, r = 100) # background為背景圖片,r是半徑,默認為10
    # ~ plt.figure()
    # ~ plt.imshow(hit_img)
    # ~ plt.show()
    #hit_img.save('out_' + image_name + '.jpeg')
    hit_img = cv2.cvtColor(np.asarray(hit_img),cv2.COLOR_RGB2BGR)#Image格式轉換成cv2格式
    overlay = image.copy()
    alpha = 0.5 # 設置覆蓋圖片的透明度
    cv2.rectangle(overlay, (0, 0), (image.shape[1], image.shape[0]), (255, 0, 0), -1) # 設置藍色為熱度圖基本色藍色
    image = cv2.addWeighted(overlay, alpha, image, 1-alpha, 0) # 將背景熱度圖覆蓋到原圖
    image = cv2.addWeighted(hit_img, alpha, image, 1-alpha, 0) # 將熱度圖覆蓋到原圖
復制代碼

 

網站上隨意找一張圖片進行實驗:

原圖如下:

結果如下:

可視化效果可以調節,如:通過調節hm.heatmap(base=background, r = 100)中的r即可調節熱力點的半徑大小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM