当前位置: 首页 > news >正文

opencv-python实战项目十一:背景减除法制作运动行人蒙版

文章目录

  • 一,简介
  • 二,背景减除法介绍
  • 三,算法实现:
  • 四,效果:

一,简介

在智能视频监控、人流量统计和运动检测等领域,背景减除法是一种常用的图像处理技术。本文将带您走进OpenCV的世界,探讨背景减除法的原理及其在实际应用中的重要性。通过学习OpenCV提供的多种背景减除算法,我们将掌握如何轻松地从视频序列中提取前景对象,为后续的图像分析和处理奠定基础。

二,背景减除法介绍

背景减除法,作为一种计算机视觉技术,旨在从固定摄像头捕获的视频流中提取出活动的主体。该方法基于一个基本假设:视频背景相对静止或变化微小,而前景则是动态的。通过构建背景模型,并对比当前帧与该模型的差异,此技术能够有效地区分前景与背景。该流程涉及背景建模、前景检测和前景分割,最终生成二值图像,明确标出前景。
在众多背景减除算法中,帧差法、混合高斯模型(MOG)、改进的MOG2以及基于核密度估计的KNN方法是其中的关键。帧差法通过比较连续帧间的差异来识别前景,适合于简单场景。MOG利用多个高斯分布对背景像素进行建模,能够应对动态背景的挑战。MOG2在MOG的基础上增加了阴影检测和对光照变化的适应能力。而KNN方法则采用核密度估计来更新背景模型,对异常值表现出更强的鲁棒性。
在选择MOG2与KNN时,以下因素需考虑:

  1. 场景复杂性:面对动态背景或阴影,MOG2更能妥善处理。
  2. 光照条件:在光照变化显著的场景中,MOG2的适应性更佳。
  3. 异常值与噪声:若场景中充斥着大量异常值和噪声,KNN的鲁棒性更胜一筹。
  4. 计算资源:MOG2通常要求更高的计算资源,在资源受限的情况下,KNN可能更为实用。
  5. 精确度要求:对于精确前景分割的高要求,特别是在参数优化后,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
在这里插入图片描述

http://www.lryc.cn/news/425196.html

相关文章:

  • 安防监控/视频汇聚平台EasyCVR如何配置,实现默认获取设备的子码流?
  • JavaScript基础——闭包
  • Linux基础入门---安装vmware
  • 用AppleScript点击无效,继续用pyautogui.click()
  • 谈谈我用MemFire Cloud开发应用的这一两年
  • AI安全-文生图
  • Hibernate 使用详解
  • 乐普医疗校招社招笔试/测评通关攻略、最新北森题库、可搜索答案
  • uniapp在线下载安装包更新app
  • Unity | AmplifyShaderEditor插件基础(第一集:简单了解ASE和初识)
  • Windows文件资源管理器未响应,磁盘状态正常,很可能是这个原因
  • 良好的代码习惯
  • 音乐生成模型应用
  • DBEUG:二维图尺寸没思路
  • 【图像去雾系列】使用SSR/MSR/MSRCR/MSRCP/automatedMSRCR算法对单图像进行图像增强,达到去雾效果
  • oracle普通导出导入
  • 如何将CSDN文章导出为pdf文件
  • 利用Python实现供应链管理中的线性规划与资源优化——手机生产计划1
  • Spring Cloud全解析:配置中心之springCloudConfig分布式配置动态刷新
  • mac如何查看shell是 zsh还是bash
  • STM32cubeMX配置Systick的bug
  • 分享几个好用js片段
  • web前端之实现一只可爱的小杰尼乌龟、伪元素、动画
  • 银河麒麟服务器版在rc.local使用ifcong 配置IP和nmcli的区别
  • 【运维】深入理解 Linux 中的 `mv` 命令,使用 `mv` 移动所有文件但排除特定文件或文件夹
  • Xilinx课程,就这么水灵灵地上线了~
  • 【axios get请求 中文乱码】
  • 智能分析/视频汇聚EasyCVR安防视频融合管理云平台技术优势分析
  • arcgis-坡度坡向分析
  • 【银河麒麟高级服务器操作系统】实际案例分析,xfsaild占用过高