python热力图背景_python 绘制场景热力图的示例
我們在做諸如人群密集度等可視化的時(shí)候,可能會(huì)考慮使用熱力圖,在Python中能很方便地繪制熱力圖。
下面以識(shí)別圖片中的行人,并繪制熱力圖為例進(jìn)行講解。
步驟1:首先識(shí)別圖像中的人,得到bounding box的中心坐標(biāo)。識(shí)別方法多樣化,坐標(biāo)也可以自己定義。
步驟2:將所有中心坐標(biāo)放入一個(gè)list類型的變量data中,即data = [[x1,y1] [x2,y2] …]
步驟3:繪制熱力圖,并將熱力圖加權(quán)疊加到原圖上。
需要import的包:
import cv2
import numpy as np
from PIL import Image
from pyheatmap.heatmap import HeatMap
import matplotlib.pyplot as plt
根據(jù)識(shí)別的結(jié)果得到data的值,傳入以下apply_heatmap(image,data)繪制熱力圖;
def apply_heatmap(image,data):
'''image是原圖,data是坐標(biāo)'''
'''創(chuàng)建一個(gè)新的與原圖大小一致的圖像,color為0背景為黑色。這里這樣做是因?yàn)樵诶L制熱力圖的時(shí)候如果不選擇背景圖,畫出來的圖與原圖大小不一致(根據(jù)點(diǎn)的坐標(biāo)來的),導(dǎo)致無法對熱力圖和原圖進(jìn)行加權(quán)疊加,因此,這里我新建了一張背景圖。'''
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是半徑,默認(rèn)為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格式轉(zhuǎn)換成cv2格式
overlay = image.copy()
alpha = 0.5 # 設(shè)置覆蓋圖片的透明度
cv2.rectangle(overlay, (0, 0), (image.shape[1], image.shape[0]), (255, 0, 0), -1) # 設(shè)置藍(lán)色為熱度圖基本色藍(lán)色
image = cv2.addWeighted(overlay, alpha, image, 1-alpha, 0) # 將背景熱度圖覆蓋到原圖
image = cv2.addWeighted(hit_img, alpha, image, 1-alpha, 0) # 將熱度圖覆蓋到原圖
網(wǎng)站上隨意找一張圖片進(jìn)行實(shí)驗(yàn):
原圖如下:
結(jié)果如下:
可視化效果可以調(diào)節(jié),如:通過調(diào)節(jié)hm.heatmap(base=background, r = 100)中的r即可調(diào)節(jié)熱力點(diǎn)的半徑大小。
以上就是python 繪制場景熱力圖的示例的詳細(xì)內(nèi)容,更多關(guān)于python 繪制熱力圖的資料請關(guān)注聚米學(xué)院其它相關(guān)文章!
總結(jié)
以上是生活随笔為你收集整理的python热力图背景_python 绘制场景热力图的示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国农业银行app怎么取消短信通知(目前
- 下一篇: python如何计算字符宽度_Pytho