opencv-python实战项目十一:背景减除法制作运动行人蒙版
文章目录
- 一,简介
- 二,背景减除法介绍
- 三,算法实现:
- 四,效果:
一,简介
在智能视频监控、人流量统计和运动检测等领域,背景减除法是一种常用的图像处理技术。本文将带您走进OpenCV的世界,探讨背景减除法的原理及其在实际应用中的重要性。通过学习OpenCV提供的多种背景减除算法,我们将掌握如何轻松地从视频序列中提取前景对象,为后续的图像分析和处理奠定基础。
二,背景减除法介绍
背景减除法,作为一种计算机视觉技术,旨在从固定摄像头捕获的视频流中提取出活动的主体。该方法基于一个基本假设:视频背景相对静止或变化微小,而前景则是动态的。通过构建背景模型,并对比当前帧与该模型的差异,此技术能够有效地区分前景与背景。该流程涉及背景建模、前景检测和前景分割,最终生成二值图像,明确标出前景。
在众多背景减除算法中,帧差法、混合高斯模型(MOG)、改进的MOG2以及基于核密度估计的KNN方法是其中的关键。帧差法通过比较连续帧间的差异来识别前景,适合于简单场景。MOG利用多个高斯分布对背景像素进行建模,能够应对动态背景的挑战。MOG2在MOG的基础上增加了阴影检测和对光照变化的适应能力。而KNN方法则采用核密度估计来更新背景模型,对异常值表现出更强的鲁棒性。
在选择MOG2与KNN时,以下因素需考虑:
- 场景复杂性:面对动态背景或阴影,MOG2更能妥善处理。
- 光照条件:在光照变化显著的场景中,MOG2的适应性更佳。
- 异常值与噪声:若场景中充斥着大量异常值和噪声,KNN的鲁棒性更胜一筹。
- 计算资源:MOG2通常要求更高的计算资源,在资源受限的情况下,KNN可能更为实用。
- 精确度要求:对于精确前景分割的高要求,特别是在参数优化后,KNN可能提供更优的结果。
三,算法实现:
import argparse
import cv2def get_opencv_result(video_to_process):"""使用OpenCV处理视频,进行背景减除操作。参数:video_to_process (str): 要处理的视频文件的路径。此函数使用OpenCV捕获视频帧,执行背景减除操作,并显示结果。这里使用了两种背景减除方法:K-近邻(KNN)和混合高斯模型(MOG2)。"""# 创建VideoCapture对象,用于进一步的视频处理captured_video = cv2.VideoCapture(video_to_process)# 检查视频捕获状态if not captured_video.isOpened:print("无法打开: " + video_to_process)exit(0)# 实例化KNN背景减除方法background_subtr_method_knn = cv2.createBackgroundSubtractorKNN()# 实例化MOG2背景减除方法background_subtr_method_mog = cv2.createBackgroundSubtractorMOG2()while True:# 读取视频帧retval, frame = captured_video.read()# 检查是否成功抓取帧if not retval:break# 调整视频帧大小frame = cv2.resize(frame, (640, 360))# 使用KNN方法进行背景减除foreground_mask_knn = background_subtr_method_knn.apply(frame)# 获取KNN方法得到的背景图像background_img_knn = background_subtr_method_knn.getBackgroundImage()# 使用MOG2方法进行背景减除foreground_mask_mog2 = background_subtr_method_mog.apply(frame)# 获取MOG2方法得到的背景图像background_img_mog2 = background_subtr_method_mog.getBackgroundImage()# 显示当前帧,两种方法的前景掩码和背景图像cv2.imshow("frame", frame)cv2.imshow("KNN_result", foreground_mask_knn)cv2.imshow("MOG2_result", foreground_mask_mog2)keyboard = cv2.waitKey(10)if keyboard == 27: # 按下ESC键退出循环breakif __name__ == "__main__":parser = argparse.ArgumentParser(description="使用OpenCV进行背景减除")parser.add_argument("--input_video",type=str,help="定义完整的输入视频路径",default="F:\\learnopencv-master\\Background-Subtraction\\space_traffic.mp4",)# 解析脚本参数args = parser.parse_args()# 启动背景减除流程get_opencv_result(args.input_video)
四,效果:
原图:
效果图:左侧KNN右侧MOG2
相关文章:

opencv-python实战项目十一:背景减除法制作运动行人蒙版
文章目录 一,简介二,背景减除法介绍三,算法实现:四,效果: 一,简介 在智能视频监控、人流量统计和运动检测等领域,背景减除法是一种常用的图像处理技术。本文将带您走进OpenCV的世界…...

安防监控/视频汇聚平台EasyCVR如何配置,实现默认获取设备的子码流?
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…...

JavaScript基础——闭包
闭包简介 闭包的作用 闭包可以保留变量的状态 闭包可以让变量私有化 闭包的缺点 闭包简介 在JavaScript中,重复声明同一个变量会导致变量冲突,在这个时候可以使用闭包创建独立的执行环境。 在JavaScript中,闭包是指封闭的执行环境ÿ…...

Linux基础入门---安装vmware
😀前言 本篇博文是关于Linux基础入门和vmwarel5.5下载,希望你能够喜欢。 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…...

用AppleScript点击无效,继续用pyautogui.click()
目标:点击下图中 CheckBox 元素 第一步:获取这个元素的位置,并打印出value,确认是开关是关的(value0)再继续 set targetbox to checkbox 1 of group 1 of scroll area 1 of scroll area 1 of group 1 of g…...

谈谈我用MemFire Cloud开发应用的这一两年
作为一个独立开发者,这两年我在应用开发的道路上经历了不少挑战和收获。而帮助我度过这些挑战、提高开发效率的“神器”之一,就是MemFire Cloud。如果你还没听说过这个工具,那么我今天就来和你分享一下我使用MemFire Cloud开发应用的经历&…...

AI安全-文生图
1 需求 2 接口 3 示例 大模型图像安全风险探析 - 先知社区 前言 文生图模型是一种新兴的人工智能技术,它通过对大规模文本数据的学习,能够生成逼真的图像。这种模型包含两个主要组件:一个文本编码器和一个图像生成器。 文本编码器接收文本输入,并将其转换为一种数字化的表示…...

Hibernate 使用详解
在现代的Java开发中,数据持久化是一个至关重要的环节。而在众多持久化框架中,Hibernate以其强大的功能和灵活性,成为了开发者们的首选工具。本文将详细介绍Hibernate的原理、实现过程以及其使用方法,希望能为广大开发者提供一些有…...

乐普医疗校招社招笔试/测评通关攻略、最新北森题库、可搜索答案
乐普医疗为什么要做笔试/测评? 笔试/测评是乐普医疗校招社招招聘流程中的必经环节,只有完成笔试/测评,候选人才有机会进入面试流程,同学们收到笔试测评通知后请尽快完成。我们给部分岗位安排了笔试,笔试的成绩对于面试官来说是很重要的参考依据,请同学们在笔试过程…...

uniapp在线下载安装包更新app
首先用getSystemInfo判断平台、 再通过json文件模拟接口 判断版本号是否一致 不一致则下载服务器apk进行更新 外加网络波动导致失败重新下载更新包 uni.getSystemInfo({success: function (e) {// #ifndef H5// 获取手机系统版本const system e.system.toLowerCase();const pl…...

Unity | AmplifyShaderEditor插件基础(第一集:简单了解ASE和初识)
前言 我本来老老实实的写着我的Shader,群里的小伙伴强烈建议我开始讲ASE,我只能说,我是一个听话的Up。 一、什么是ASE 全称AmplifyShaderEditor,是一个unity插件,存在于unity商城中,售价看他们心情。&am…...

Windows文件资源管理器未响应,磁盘状态正常,很可能是这个原因
最近使用电脑,老感觉性能吃力,就想着自己把一些自动和延迟启动的服务给关掉一些,结果不小心把Work Folders给关闭了。于是,文件资源管理器能正常打开窗口,但是去点击磁盘或者去打开近期访问文件夹,它就会一…...

良好的代码习惯
虽然我们大家都知道这个道理,但能长期坚持下来的并不多。 在多年的项目开发过程中,遇到了各型各色的程序员,有技术一流的,有速度一流的,当然也有bug不断的,但真正能做到养成良好代码习惯并不多,…...

音乐生成模型应用
重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

DBEUG:二维图尺寸没思路
问题 标注总是不对 解决 关注孔(螺纹 沉头 通孔 标注清楚)关注孔的定位(同心圆 靠边定位)0.02一定打开三维图 看装配关系过盈 还是 查公差表可以min max限制装配公差一定要有意义部分宽度变化大的加平行修改的rev改成1 方框1表…...

【图像去雾系列】使用SSR/MSR/MSRCR/MSRCP/automatedMSRCR算法对单图像进行图像增强,达到去雾效果
目录 一 图像去雾算法概述 二 SSR/MSR/MSRCR算法 三 实践 一 图像去雾算法概述 近些年来,出现了众多的单幅图像去雾算法,其主要可以分为 3 类:基于图像增强的去雾算法、基于图像复原的去雾算法和基于 CNN 的去雾算法。 ▲基于图像增强的去雾算法 通过图像增强技术突出图…...

oracle普通导出导入
原始的普通导出导入工具,是一个客户端工具。使用导出工具(export utility简称exp)是将数据从oracle数据库以二进制形式写入操作系统文件,这个文件存储在数据库之外,并且可以被另一个数据库使用导入工具(imp…...

如何将CSDN文章导出为pdf文件
第一步: 打开想要导出的页面,空白处点击鼠标右键⇒点击“检查”或“check”,或直接在页面按F12键。 第二步: 复制以下代码粘贴到控制台,并按回车。 若提示让输入“允许粘贴”或“allow pasting”,按提示…...

利用Python实现供应链管理中的线性规划与资源优化——手机生产计划1
目录 写在开头1. Python与线性规划的基础2.供应链管理中的资源优化3.利用Python进行供应链资源优化3.1 简单的优化实例3.2 考虑多种原材料3.3 多种原材料、交付时间与物流融合的情况 4.规范性分析在供应链管理中的应用价值写在最后 写在开头 在全球供应链日益复杂的背景下&…...

Spring Cloud全解析:配置中心之springCloudConfig分布式配置动态刷新
分布式配置动态刷新 当配置中心中的配置修改之后,客户端并不会进行动态的刷新,每次修改配置文件之后,都需要重启客户端,那么如何才能进行动态刷新呢 可以使用RefreshScope注解配合actuator端点进行手动刷新,不需要重…...

mac如何查看shell是 zsh还是bash
怎么确定mac使用的 shell类型 在终端中输入echo $0命令查看你所使用的 shell(默认使用的zsh) echo $0# 或者 echo $SHELL 如果是 bash 配置文件则为:~/.bash_profile 是 zsh,则配置文件为:~/.zshrc 如何更改默认 S…...

STM32cubeMX配置Systick的bug
STM32cubeMX版本:6.11.0 现象 STM32cubeMX配置Systick的时钟,不管选择不分频 还是8分频。 生成的代码都是一样的,代码都是不分频。 即不管选择不分频还是8分频,Systick都是使用的系统时钟 函数调用 HAL_Init() → HAL_Init…...

分享几个好用js片段
最近在做telegram小程序,所以又回归了web端了,发现几个好用又简洁的代码片段,在这里分享一下。 获取浏览器cookie值 const cookie name > ; ${document.cookie}.split(; ${name}).pop().split(;).shift();cookie(_ga); 2. 将RGB转换为1…...

web前端之实现一只可爱的小杰尼乌龟、伪元素、动画
MENU 前言效果图htmlstyle 前言 代码段使用HTML和CSS创建一个“杰尼龟”的动画。 效果图 html <div class"squirtle"><div class"tail"></div><div class"body"><div class"stomach"></div><d…...

银河麒麟服务器版在rc.local使用ifcong 配置IP和nmcli的区别
1、使用ifconfig配置IP ifconfig是一个传统的网络配置工具,它直接操作网络接口,允许用户手动设置IP地址、子网掩码等网络参数。这种方式比较直接,但需要用户对网络接口和配置有较深入的了解。使用ifconfig配置的IP地址在系统重…...

【运维】深入理解 Linux 中的 `mv` 命令,使用 `mv` 移动所有文件但排除特定文件或文件夹
文章目录 一、基本语法二、基本用法三、使用 `mv` 移动所有文件但排除特定文件或文件夹**命令解释:**四、其他常用选项五、总结深入理解 Linux 中的 mv 命令:移动文件和文件夹的艺术 在日常使用 Linux 的过程中,mv(move)命令是我们经常会用到的一个命令,它不仅可以用来移…...

Xilinx课程,就这么水灵灵地上线了~
如果你想了解: 如何利用精通流水线(Pipeline)技术,让电路设计效率倍增? 如何掌握利用性能基线指导设计流程的方法? 如何理解集成电路设计中的UltraFast Design Methodology Implementation设计方法学中的…...

【axios get请求 中文乱码】
问题复现 前端请求: company/queryFenByOrgNo?orgNo5&qcNam%D2%BB%C6%DA qcNam 一期 后端接收: CompanyManagementController - 入参 orgNo“5”,qcNamһ�� 问题解决方案 let httpUrl this.httpcompany/queryFenByOrgNo…...

智能分析/视频汇聚EasyCVR安防视频融合管理云平台技术优势分析
安防行业的发展历程主要围绕视频监控技术的不断改革升级,从最初的模拟监控到数字监控,再到高清化、网络化监控,直至现在的智能化监控,每一次变革都推动了行业的快速发展。特别是近年来,随着AI、大数据、物联网等技术的…...

arcgis-坡度坡向分析
坡向的描述有定性和定量两种方式,定量是以东为0,顺时针递增,南为90,西为180,北为270等,范围在0~35959′59″之间。 定性描述有8方向法和4方向法. 8 方向为东、东南、南、西南、西、西北、北、东…...