使用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()




目录
相关文章
|
22天前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
137 9
|
28天前
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
61 10
|
1月前
|
Shell 程序员 开发者
轻松搞定在Python中构建虚拟环境
本教程教你如何使用业界公认的最佳实践,创建一个完全工作的Python开发环境。虚拟环境通过隔离依赖项,避免项目间的冲突,并允许你轻松管理包版本。我们将使用Python 3的内置`venv`模块来创建和激活虚拟环境,确保不同项目能独立运行,不会相互干扰。此外,还将介绍如何检查Python版本、激活和停用虚拟环境,以及使用`requirements.txt`文件共享依赖项。 通过本教程,你将学会: - 创建和管理虚拟环境 - 避免依赖性冲突 - 部署Python应用到服务器 适合新手和希望提升开发环境管理能力的开发者。
110 2
|
1月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
111 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
115 3
|
2月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
3月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
3月前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
3月前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
175 3
|
3月前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API

热门文章

最新文章

推荐镜像

更多