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

这篇具有很好参考价值的文章主要介绍了OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.概念介绍

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

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

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

2. 函数介绍

MOG算法

cv2.createBackgroundSubtractorMOG(history, nmixtures, backgroundRatio, noiseSigma)
history:用于训练背景的帧数,默认为200帧
nmixtures:高斯范围值,默认为5;5*5的卷积核
backgroindRatio:背景比率,默认0.7
noiseSigma:默认0,自动降噪

代码示例:

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()

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

MOG2算法

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

cv2.createBackgroundSubtractorMOG2()
参数同MOG一样
detectShadows:是否检测阴影,默认为True

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()

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

GMG算法

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

算法:cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames=120)
initializationFrames:默认帧数为120,需要吃掉120帧,对之后的帧进行优化。

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()

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

原视频获取链接

以上就是视频分割的基本使用方式,详情烦请参考相关论文和相关文档。文章来源地址https://www.toymoban.com/news/detail-606240.html

到了这里,关于OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包