python 繪製場景熱力圖的示例
阿新 • • 發佈:2020-09-25
我們在做諸如人群密集度等視覺化的時候,可能會考慮使用熱力圖,在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),(255,-1) # 設定藍色為熱度圖基本色藍色 image = cv2.addWeighted(overlay,alpha,image,1-alpha,0) # 將背景熱度圖覆蓋到原圖 image = cv2.addWeighted(hit_img,0) # 將熱度圖覆蓋到原圖
網站上隨意找一張圖片進行實驗:
原圖如下:
結果如下:
視覺化效果可以調節,如:通過調節hm.heatmap(base=background,r = 100)中的r即可調節熱力點的半徑大小。
以上就是python 繪製場景熱力圖的示例的詳細內容,更多關於python 繪製熱力圖的資料請關注我們其它相關文章!