7免费网站建站,网站开发包含哪些类别,装饰公司资质,wordpress 登陆函数目录
一、背景建模
1、什么是背景建模
2、背景建模的方法 1#xff09;帧差法(backgroundSubtractor) 2#xff09;基于K近邻的背景/前景分割算法BackgroundSubtractorKNN 3#xff09;基于高斯混合的背景/前景分割算法BackgroundSubtractorMOG2
3、步骤 1#xff09;初…目录
一、背景建模
1、什么是背景建模
2、背景建模的方法 1帧差法(backgroundSubtractor) 2基于K近邻的背景/前景分割算法BackgroundSubtractorKNN 3基于高斯混合的背景/前景分割算法BackgroundSubtractorMOG2
3、步骤 1初始化背景模型 2处理每一帧图像 3计算帧差图像 4二值化处理 5前景检测 6更新背景模型 7重复以上步骤
二、案例实现
1、直接来看完整代码 运行结果
2、上述卷积核形态
1矩形卷积核 MORPH_RECT
2十字形卷积核 MORPH_CROSS
3椭圆形卷积核 MORPH_ELLIPSE 一、背景建模
1、什么是背景建模 背景建模是指通过分析视频序列中的像素值变化情况从中提取出静态背景部分并将其用于目标检测、运动跟踪等计算机视觉任务中。在实际应用中背景建模常用于视频监控、行人检测、车辆识别等领域。 在视频中背景通常被定义为相对稳定的部分例如墙壁、地面或天空等。背景建模的目标是将动态的前景对象与静态的背景进行分离以便进一步分析和处理。 2、背景建模的方法 1帧差法(backgroundSubtractor) 该方法将连续的视频帧与背景进行比较通过像素值的差异来提取前景目标。当像素差异超过设定的阈值时将该像素标记为前景。该方法简单直观适用于简单场景和静态背景。 帧差法非常简单但是会引入噪音和空洞(人物中间是黑色的)问题 2基于K近邻的背景/前景分割算法BackgroundSubtractorKNN 该方法主要通过对每个像素周围的邻近像素进行聚类来建模背景。该算法将每个像素看作一个样本点在每次输入新的观测帧时将其与背景模型进行比较并根据像素值的差异度量其是否为前景。BackgroundSubtractorKNN算法具有较快的处理速度和一定的鲁棒性适用于实时背景建模和前景检测。 3基于高斯混合的背景/前景分割算法BackgroundSubtractorMOG2 它假设每个像素的背景像素值服从多个高斯分布。算法通过对每个像素进行建模并根据新的观测值进行更新最终得到背景模型。当新的观测值与背景模型不匹配时将其标记为前景。 BackgroundSubtractorMOG2算法能够自适应地调整模型的数量和混合权重适用于复杂场景和动态背景。 3、步骤 1初始化背景模型 从视频序列或摄像头中获取第一帧图像作为初始背景图像。 2处理每一帧图像 获取下一帧图像将其与背景图像进行比较。 3计算帧差图像 将当前帧图像与背景图像进行像素级别的差分计算得到帧差图像。 4二值化处理 将帧差图像转换为二值图像根据设置的阈值将差异像素标记为前景或背景。 5前景检测 根据二值化处理得到的前景图像可以进行一系列处理如轮廓检测、面积过滤等以获得更精确的前景区域。 6更新背景模型 在每一帧图像处理后更新背景模型可以采用移动平均或其他方法来更新背景的估计。 7重复以上步骤 持续处理每一帧图像直到视频序列结束或达到设定的停止条件。 二、案例实现
1、直接来看完整代码
import cv2
# 经典的测试视频
cap cv2.VideoCapture(test.avi) # 打开视频文件或者打开摄像头
kernel cv2.getStructuringElement(cv2.MORPH_CROSS,(3, 3)) # 设置卷积核形态cv2.MORPH_CROSS表示设置的是十字形卷积核大小为3*3
fgbg cv2.createBackgroundSubtractorMOG2() # 创建混合高斯模型用于背最建模从视频帧中分离出前景对象。while 1: # 定义一个死循环用于反复从视频中提取出每一帧画面ret, frame cap.read() # 读取视频文件的每一帧画面返回值ret为True表示正常读取到图像,frame表示从视频中获取当前一帧图片cv2.imshow( frame,frame) # 展示读取到的每一帧画面以此来构成视频的画面fgmask fgbg.apply(frame) # 调用高斯混合模型中的用法apply对获取到的每一帧图像进行前景背景分隔算法生成一个背景掩码这个背景掩码的大小是与输入图像大小相同的二值图像前景为白色背景为黑色cv2.imshow(fgmask, fgmask) # 展示背景掩码对应的图像fgmask_new cv2.morphologyEx(fgmask, cv2.MORPH_OPEN,kernel) # 上述生成的掩码图像有很多噪声点此处使用开运算即先腐蚀后膨胀去除噪声点cv2.imshow( fgmask1,fgmask_new) # 展示处理完的图像# 寻找视频中的轮廓_,contours, h cv2.findContours(fgmask_new, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 对上述处理完的图像进行轮廓检测cv2.RETR_EXTERNAL表示只检测最外侧轮廓cv2.CHAIN_APPROX_SIMPLE表示删除轮廓上冗余点来简化形状只保留端点并用线段连接# _表示修改后的图像受OpenCV版本影响可能没有contours是一个列表存放提取到的每一个轮廓坐标点集的形式h表示轮廓的层级信息for c in contours: # 遍历每一个轮廓perimeter cv2.arcLength(c,True) # 计算轮廓周长if perimeter 188: # 判断轮廓周长的大小用来筛选周长大于188的轮廓# 找到一个直矩形不会旋转x,y,w,h cv2.boundingRect(c) # 对输入的轮廓进行处理返回该轮廓的坐标和高宽# 在原视频上绘制出这个轮廓的外接矩形fgmask_new_rect cv2.rectangle(frame,(x,y),(xw,yh),(0,255,0),2)cv2.imshow(fgmask_new_rect,fgmask_new_rect) # 展示绘制的图像k cv2.waitKey(60)if k 27: # 勇于接收键盘esc键以此来中断死循环break 运行结果 2、上述卷积核形态
1矩形卷积核 MORPH_RECT 2十字形卷积核 MORPH_CROSS 3椭圆形卷积核 MORPH_ELLIPSE