如何使用Python和OpenCV制作热图

3

我想实现这个功能:

YouTube链接- https://www.youtube.com/watch?v=Qk4V_x6B7jY&t=5s

博客链接- http://www.businessinsider.in/These-Heat-Maps-Show-How-Retailers-Track-You-As-You-Shop/articleshow/29512380.cms

我想使用Python和OpenCV,但我是OpenCV的初学者,因此不知道如何实现。我有一些基本的想法。我能够追踪运动并在移动物体周围画出一个矩形,并将矩形的坐标保存在外部CSV文件中。但是,我在绘制热图方面遇到了困难。如何使颜色从蓝色(正常移动)变为红色(高强度运动),当人们在某个区域内移动得越来越多时?请帮帮我。

1个回答

12
绘制热力图的基本思想是通过可视化来获取特定事件发生的概率反馈。您可以编写自己的方法,该方法可接受0-1范围内的概率并输出255,0,0 - 0,0,255范围内的颜色。或者使用OpenCV中提供的颜色映射。您可能会对使用COLORMAP_JET感兴趣:

enter image description here

现在,您需要将概率归一化为0-255范围,而不是0-1。然后,您可以使用cv2.applyColorMap(input_prob, cv2.COLORMAP_JET)来获得所需的输出。


我想要能够更新值。因为,假设当运动很小的时候颜色是蓝色,但是当运动增加时颜色应该更新为红色。现在,如果我在事件之后返回概率,那么如何更新值呢?您能详细解释一下吗?这将会非常有帮助。 - sks
所以,我认为那样做行不通,而且cv2.applyColorMap()函数的第一个参数应该是图像文件,所以我认为你写的有误。 - sks
@ZdaR,输入概率能否表示为 3D (3 通道) 数组,值介于 0-1 之间?如果是这样,我使用 cv2.imshow() 只会输出黑色图像。 - Darlyn
您可以将您的三通道图像转换为灰度图像,然后在将值归一化到0-255范围后应用此方法。 - ZdaR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接