视频分割背景
- 1.概念介绍
- 2. 函数介绍
- 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,自动降噪
代码示例:
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
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帧,对之后的帧进行优化。
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()
原视频获取链接
以上就是视频分割的基本使用方式,详情烦请参考相关论文和相关文档。