OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG

视频分割背景

1.概念介绍

视频背景扣除原理:视频是一组连续的帧(一幅幅图组成),帧与帧之间关系密切(GOP/group of picture),在GOP中,背景几乎是不变的,变的永远是前景。

  • 背景分离(BS)是一种通过使用静态相机来生成前景掩码(即包含属于场景中的移动对象像素的二进制图像)的常用技术
  • 顾名思义,BS计算前景掩码,在当前帧与背景模型之间执行减法运算,其中包含场景的静态部分,或者更一般而言,考虑到所观察场景的特征,可以将其视为背景的所有内容。

2. 函数介绍

MOG算法

cv2.createBackgroundSubtractorMOG(history, nmixtures, backgroundRatio, noiseSigma)

history:用于训练背景的帧数,默认为200帧

nmixtures:高斯范围值,默认为5;5*5的卷积核

backgroindRatio:背景比率,默认0.7

noiseSigma:默认0,自动降噪

代码示例:

python 复制代码
import cv2
import numpy as np

# 读取视频帧
cap = cv2.VideoCapture('./video/vtest.avi')
mog = cv2.bgsegm.createBackgroundSubtractorMOG()

while True:
    ret, frame = cap.read()
    if ret == False:
        exit(1)
    fgmask = mog.apply(frame)
    cv2.imshow('text', fgmask)
    k = cv2.waitKey(10) & 0xff
    if k == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

MOG2算法

MOG2增加的是对阴影的识别,但是会产生更多的噪点。

cv2.createBackgroundSubtractorMOG2()

参数同MOG一样

detectShadows:是否检测阴影,默认为True

python 复制代码
import cv2
import numpy as np

# 读取视频帧
cap = cv2.VideoCapture('./video/vtest.avi')
# mog = cv2.bgsegm.createBackgroundSubtractorMOG()
mog = cv2.createBackgroundSubtractorMOG2()

while True:
    ret, frame = cap.read()
    if ret == False:
        exit(1)
    fgmask = mog.apply(frame)
    #cv2.imshow('MOG', fgmask)
    cv2.imshow('MOG2', fgmask)
    k = cv2.waitKey(10) & 0xff
    if k == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

GMG算法

GMG算法的抗噪性更强,但是该算法有缓存初始帧,即缓存的帧数不显示。

算法:cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames=120)

initializationFrames:默认帧数为120,需要吃掉120帧,对之后的帧进行优化。

python 复制代码
import cv2
import numpy as np

# 读取视频帧
cap = cv2.VideoCapture('./video/vtest.avi')
# mog = cv2.bgsegm.createBackgroundSubtractorMOG()
# mog = cv2.createBackgroundSubtractorMOG2()
gmg = cv2.bgsegm.createBackgroundSubtractorGMG()

while True:
    ret, frame = cap.read()
    if ret == False:
        exit(1)
    fgmask = gmg.apply(frame)
    #cv2.imshow('MOG', fgmask)
    cv2.imshow('MOG2', fgmask)
    k = cv2.waitKey(10) & 0xff
    if k == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

原视频获取链接

以上就是视频分割的基本使用方式,详情烦请参考相关论文和相关文档。

相关推荐
imbackneverdie2 小时前
国自然申报技术路线图模板
图像处理·人工智能·信息可视化·数据可视化·学术·国自然·国家自然科学基金
明洞日记2 小时前
【VTK手册026】高性能网格简化——vtkQuadricClustering 深度解析
c++·图像处理·vtk·图形渲染
测试人社区-小明3 小时前
涂鸦板测试指南:从基础功能到用户体验的完整框架
人工智能·opencv·线性代数·微服务·矩阵·架构·ux
德卡先生的信箱3 小时前
深度学习图像处理(3)----二阶段目标检测
图像处理·深度学习·目标检测
雍凉明月夜4 小时前
视觉opencv学习笔记Ⅴ-数据增强(2)
人工智能·python·opencv·计算机视觉
棒棒的皮皮4 小时前
【OpenCV】Python图像处理几何变换之缩放
图像处理·python·opencv·计算机视觉
德卡先生的信箱4 小时前
深度学习图像处理(2)----一阶段目标检测
图像处理·深度学习·目标检测
爱思德学术5 小时前
【EI收录】第七届亚太图像处理、电子与计算机国际会议(IPEC 2026)
图像处理·计算机视觉
Logic1016 小时前
《Photoshop图像处理》抠图难题破解:模特发丝精细抠取全流程详解
图像处理·photoshop·抠图·图像合成·ps教程·选择并遮住·快速选择工具
Giser探索家6 小时前
卫星遥感数据核心参数解析:空间分辨率与时间分辨率
大数据·图像处理·人工智能·深度学习·算法·计算机视觉