python 绘制场景热力图的示例


Posted in Python onSeptember 23, 2020

我们在做诸如人群密集度等可视化的时候,可能会考虑使用热力图,在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) # 将热度图覆盖到原图

网站上随意找一张图片进行实验:

原图如下:

python 绘制场景热力图的示例

结果如下:

python 绘制场景热力图的示例

可视化效果可以调节,如:通过调节hm.heatmap(base=background, r = 100)中的r即可调节热力点的半径大小。

以上就是python 绘制场景热力图的示例的详细内容,更多关于python 绘制热力图的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
wxpython中利用线程防止假死的实现方法
Aug 11 Python
python简单线程和协程学习心得(分享)
Jun 14 Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
浅谈python3.x pool.map()方法的实质
Jan 16 Python
Python 脚本的三种执行方式小结
Dec 21 Python
Python 过滤错误log并导出的实例
Dec 26 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
Python字典实现伪切片功能
Oct 28 Python
python元组打包和解包过程详解
Aug 02 Python
Anaconda使用IDLE的实现示例
Sep 23 #Python
python获取时间戳的实现示例(10位和13位)
Sep 23 #Python
python rsa-oaep加密的示例代码
Sep 23 #Python
python删除文件、清空目录的实现方法
Sep 23 #Python
详解Anaconda 的安装教程
Sep 23 #Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 #Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 #Python
You might like
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP 面向对象详解
2012/09/13 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
微信小程序一周时间表功能实现
2019/10/17 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
python文件操作之目录遍历实例分析
2015/05/20 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
会计与审计毕业生自荐信范文
2013/12/30 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript