计算机视觉基础 第13章 |背景建模与运动目标检测

目录

前言

一、实验需求

二、实验原理分析

[2.1 MOG2(高斯混合模型背景减除)](#2.1 MOG2(高斯混合模型背景减除))

[2.2 形态学开运算](#2.2 形态学开运算)

三、完整代码实现

四、实验结果与分析

五、本章小结


前言

在视频监控场景中,经常需要把运动的前景物体(行人、车辆)和静止背景分离开,实现运动目标提取。背景建模就是构建出视频背景图像,通过对比当前帧与背景,得到运动前景掩码。本章使用MOG2 高斯混合背景减除算法完成视频运动目标检测,结合形态学操作去除掩码噪声,轮廓检测框选出运动物体。

一、实验需求

读取视频文件,有目标运动的视频即可,使用背景建模算法分离背景与运动前景;通过形态学运算消除前景掩码中的噪点;查找轮廓,依据轮廓周长过滤小噪点目标,对有效运动物体绘制矩形框,实现视频运动物体检测。

二、实验原理分析

2.1 MOG2(高斯混合模型背景减除)

cv2.createBackgroundSubtractorMOG2()是基于高斯混合模型的背景建模算法。

  • 算法会统计视频图像每个像素点一段时间内的像素值分布,建立多个高斯分布模型,区分背景像素与前景像素,长时间像素值不变的为背景像素,突然改变的为前景像素。
  • apply(frame)输入当前帧图像,输出前景掩码 fgmask :运动前景像素为白色255,背景像素为黑色0,输出第一帧的掩码图是大量的白色噪声点,因为没有前一帧作为比较。
  • getBackgroundImage()可以获取算法学习得到的背景图像。

2.2 形态学开运算

缺点:MOG2算法基于单像素点进行前景、背景判定,对环境干扰较为敏感。视频中的光照波动、树叶轻微晃动等微小动态变化,都会被算法误识别为运动前景,使原始掩码产生大量椒盐噪声,出现零散的白色噪点,因此需要结合形态学操作完成降噪优化。

python 复制代码
kernel = cv2.getStructuringElement(cv2.MORPH_CLOSE,(3,3))
fgmask_new = cv2.morphologyEx(fgmask,cv2.MORPH_OPEN,kernel)

开运算 = 先腐蚀、后膨胀 。

作用:消除掩码中小面积白色噪点,断开细小的连通区域;同时尽量保留较大运动目标物体轮廓。

2.3 轮廓查找与目标筛选

经过形态学去噪处理后,视频每一帧均可得到干净、有效的二值掩码图像。基于二值图像的明暗分割特性,可精准提取运动目标的轮廓信息,通过求取轮廓外接矩形的方式锁定目标范围,最终实现视频中运动物体的识别与定位。

  1. cv2.findContours()在处理后的二值掩码上查找外部轮廓。
  2. cv2.arcLength(c,True)计算轮廓周长;设置阈值perimeter>188,过滤掉面积很小的噪声轮廓。
  3. cv2.boundingRect(c)求取轮廓外接矩形坐标(x,y,w,h)。
  4. cv2.rectangle()在原始视频帧上绘制绿色矩形框,标记运动目标。

三、完整代码实现

python 复制代码
import cv2
读取视频
cap = cv2.VideoCapture(r"D:\pythoncode2\bigdata_ai40\data\test.avi")
卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_CLOSE,(3,3))
创建MOG2高斯混合背景减除器
MOG2:高斯混合模型背景减除算法,分离运动前景与静止背景,输出二值掩码
fgbg = cv2.createBackgroundSubtractorMOG2()
while True:
ret, frame = cap.read()
if not ret:   # 读取到视频末尾,退出循环
break
cv2.imshow("frame", frame)
# 应用背景减除,得到前景掩码
fgmask = fgbg.apply(frame)
cv2.imshow("fgmask", fgmask)
获取算法学习得到的背景图像
bg_img = fgbg.getBackgroundImage()
cv2.imshow("background", bg_img)
形态学开运算:腐蚀再膨胀,去除掩码离散小白噪声点
fgmask_new = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
cv2.imshow("fgmask_new", fgmask_new)
查找外部轮廓
contours = cv2.findContours(fgmask_new,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]
fgmask_new_rect = frame.copy()  # 在副本上画框,避免修改原图
for c in contours:
perimeter = cv2.arcLength(c, True)
# 根据轮廓周长过滤过小噪声轮廓
if perimeter > 188:
x, y, w, h = cv2.boundingRect(c)
cv2.rectangle(fgmask_new_rect,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow("fgmask_new_rect", fgmask_new_rect)
k = cv2.waitKey(60)
if k == 27:   # ESC按键退出
break
cap.release()
cv2.destroyAllWindows()

四、实验结果与分析

运行上述代码,程序会依次弹出多个窗口,分别展示原始视频帧、前景掩码、背景图像、形态学处理后的掩码以及最终绘制矩形框的检测结果。通过观察可以发现,原始前景掩码中存在大量零散的白色噪点,经过形态学开运算处理后,掩码中的椒盐噪声被有效去除,运动目标区域更加完整、干净。

在最终检测结果窗口中,视频中的运动物体被绿色矩形框准确框选。当画面中存在行人或车辆等运动目标时,矩形框能够跟随目标移动并保持稳定;当画面中只有静止背景时,不会出现误检框。实验结果表明,基于 MOG2 背景建模结合形态学降噪与轮廓筛选的方案,能够有效完成视频运动目标检测任务。

五、本章小结

本章实验完成了基于背景建模的视频运动目标检测完整流程,整体技术链路清晰完整:读取视频时序帧 → MOG2高斯混合算法迭代构建背景模型、生成前景二值掩码 → 提取纯净场景背景图像 → 形态学开运算剔除掩码椒盐噪声 → 提取前景目标轮廓 → 基于轮廓周长阈值筛选有效目标 → 绘制外接矩形框可视化标记运动物体。

MOG2高斯混合背景减除算法适配常规静态监控场景,具备自适应轻微场景扰动、实时迭代更新背景模型的优势,实用性较强。但该算法存在固有缺陷,对光照突变、目标阴影、微小场景晃动等干扰因素敏感度较高,易产生误检测,必须搭配形态学降噪、轮廓阈值筛选等后处理手段优化检测精度,提升检测效果。

为进一步提升复杂场景中运动目标检测的稳定性与检测精度,后续自行尝试KNN背景减除算法、GMG背景建模算法等主流背景建模方案,通过多算法对比实验,分析各类算法的优缺点与场景适配能力,择优选用最优检测方案。

相关推荐
AI宇宙狂想家5 分钟前
开源 AI 视频工具进化史:从难用到好用,OpenMontage 改了什么
开发语言·前端·人工智能·开源·ai创业·openmontage
首席数智官6 分钟前
Agent进入产业,腾讯云重新定义AI生态价值
大数据·人工智能
寻道码路9 分钟前
AI Agent 工程化开发实战(五):持久化与断点恢复——Checkpointer 与 Store
人工智能·大模型·checkpoint·持久化·ai agent·langgraph·ai工程化
愤怒火龙果14 分钟前
AI攻防 AIRT补充篇|侦察指纹 · 多模态越狱 · Agent 与 MCP 安全
网络·人工智能·ai安全
山海鲸可视化16 分钟前
数字孪生项目案例 | 智慧城市IOC可视化
人工智能·数据分析·智慧城市·数字孪生·三维模型
北邮刘老师16 分钟前
智能体手机的成败关键——智能体互联生态
网络·人工智能·智能手机·智能体·智能体互联网
chaoyuanl18 分钟前
超元力玻璃剧场:裸眼3D、8K高清与悬空栈桥的成熟文旅解决方案
大数据·人工智能·3d·xr·vr
Yingyingyingyyy21 分钟前
GitHub 开源热榜项目-周榜(2026-11-02)
人工智能·开源·github
Dovis(誓平步青云)23 分钟前
启元 T1 Pro 视觉伺服实践:基于 HSV 阈值与针孔测距的启元机器人寻物实现
开发语言·人工智能·机器学习·二次开发
虎鲸不是鱼24 分钟前
AI 自动化逆向(三十六)先找不加密的部分
人工智能·自动化·大模型·逆向·ai逆向