使用OpenCV和Python构建运动热图视频

简介: 使用OpenCV和Python构建运动热图视频

OpenCV是一个强大的图像和视频处理库,在这篇文章中,我将创建一个运动热图,用于检测运动、一些物体或人的流动方向,以及在投影公共区域时对建筑师的帮助。

tt.png

简介:

OpenCV,或(开源计算机视觉)是英特尔于1999年开发的一个库,主要是计算机视觉和实时视频操作,它是用C++编写的,但受不同的语言(包括Python)支持。

工作流程:

这个程序是基于一种被称为高斯背景减法的技术。这项技术被广泛应用于用稳定的摄像机检测运动物体。

背景减法创建一个表示帧(图像的静态部分)背景的蒙版,对于每一帧,它将减去前一帧。

让我们对该算法如何工作的两个主要步骤进行一个简要概述:

  • 背景初始化:在第一步中,通过冻结第一帧来计算背景的模型。
  • 更新:在第二步中,下一帧将从上一帧中减去,因此,如果两帧之间发生变化(移动),则这些帧的差异将反映出该变化,可以通过应用过滤器来进行市场销售。

以下是背景遮罩应用于从城市摄像机录制的短视频的示例:

tt.png

代码:

对于整个项目存储库,请在此处检查。

代码首先读取输入的视频文件并初始化所需的一些变量:

1. capture = cv2.VideoCapture('input.mp4')
2. background_subtractor = cv2.bgsegm.createBackgroundSubtractorMOG()
3. length = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))

然后,for循环遍历帧开始:

1. for i in range(0, length):
2. 
3.     ret, frame = capture.read()
4. 
5.     # If first frame
6.     if first_iteration_indicator == 1:
7. 
8.         first_frame = copy.deepcopy(frame)
9.         height, width = frame.shape[:2]
10.         accum_image = np.zeros((height, width), np.uint8)

第一个if块检查该帧是否为视频的第一帧,这样做是为了初始化背景减法的背景,然后accum_image使用与该帧的大小相对应的大小来初始化该数组。

1. filter = background_subtractor.apply(frame)  # remove the background
2. 
3. threshold = 2
4. maxValue = 2
5. ret, th1 = cv2.threshold(filter, threshold, maxValue, cv2.THRESH_BINARY)
6. 
7. accum_image = cv2.add(accum_image, th1)
8. 
9. color_image_video = cv2.applyColorMap(accum_image, cv2.COLORMAP_HOT)

为了消除例如风,小鸟飞行等少量运动,将阈值与maxValue一起应用到遮罩上。

然后将掩码的结果添加到accum_image数组中,对每个帧执行此操作。结果由用于存储视频中发生的每个运动的accum_image数组组成,。

此外,在最后,因此,当已经对每个帧执行了先前描述的操作时,颜色映射被应用于遮罩并且遮罩与当前帧合并。

tt.png


更进一步说,可以制作一个显示热图逐帧衰减的视频。为了实现这一点,将导出每个帧,然后再次使用cv2,通过合并所有帧来生成视频:

1. video = cv2.VideoWriter('output.avi', fourcc, 30.0, (width, height))
2. for image in images:
3.     video.write(cv2.imread(os.path.join(image_folder, image)))
4. 
5. cv2.destroyAllWindows()




目录
相关文章
|
26天前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
40 3
|
28天前
|
机器学习/深度学习 数据采集 数据可视化
Python 数据分析:从零开始构建你的数据科学项目
【10月更文挑战第9天】Python 数据分析:从零开始构建你的数据科学项目
51 2
|
6天前
|
弹性计算 数据管理 数据库
从零开始构建员工管理系统:Python与SQLite3的完美结合
本文介绍如何使用Python和Tkinter构建一个图形界面的员工管理系统(EMS)。系统包括数据库设计、核心功能实现和图形用户界面创建。主要功能有查询、添加、删除员工信息及统计员工数量。通过本文,你将学会如何结合SQLite数据库进行数据管理,并使用Tkinter创建友好的用户界面。
从零开始构建员工管理系统:Python与SQLite3的完美结合
|
19天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
3天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
13 3
|
3天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
14 2
|
3天前
|
机器学习/深度学习 JSON API
Python编程实战:构建一个简单的天气预报应用
Python编程实战:构建一个简单的天气预报应用
13 1
|
3天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
16 1
|
12天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
23 2
|
12天前
|
数据采集 存储 机器学习/深度学习
构建高效的Python网络爬虫
【10月更文挑战第25天】本文将引导你通过Python编程语言实现一个高效网络爬虫。我们将从基础的爬虫概念出发,逐步讲解如何利用Python强大的库和框架来爬取、解析网页数据,以及存储和管理这些数据。文章旨在为初学者提供一个清晰的爬虫开发路径,同时为有经验的开发者提供一些高级技巧。
12 1
下一篇
无影云桌面