一、背景差分法
它的基本思想是将输入图像与背景模型进行比较,通过判定灰度等特征的变化,或用直方图等统计信息的变化来分割运动目标。首先建立好背景模型,存储背景图像。当当前帧与背景图像相减大于一定的阈值时,则判定该像素为前景目标:输入图像减去背景图像,T为阈值(差值)。经过阈值处理后,图像中0值对应的点即为背景图像,1值对应的点即为场景中运动的像素点。
该方法实现较为简单,且实时性好,在完整的背景图像时,能够较好的捕获物体。但是该方法鲁棒性较差,动态场景的变化对结果又很大的影响,比如:光照的变化,天气的变化,采集位置的移动等。
(一)BackgroundSubtractorMOG
这是一个以混合高斯模型为基础的前景/背景分割算法。2001年,P. KadewTraKuPong 和 R. Bowden在论文"An improved adaptive background mixture model for real-time tracking with shadow detection" 中进行了介绍。它使用 K(K=3 或 5)个高斯分布混合对背景像素进行建模。混合的权重表示这些颜色停留在场景中的时间比例,背景颜色是那些保持更长时间和更静态的颜色。
在编写代码时,我们需要使用函数:cv2.createBackgroundSubtractorMOG()创建一个背景对象。这个函数有些可选参数,比如要进行建模场景的时间长度,高斯混合成分的数量,阈值等。将他们全部设置为默认值。然后在整个视频中我们是需要使用 backgroundsubtractor.apply()就可以得到前景的掩码图。
简单例子:
import numpy as np
import cv2 as cv
cap = cv.VideoCapture('D:/Desktop/abc/5.mp4')
fgbg = cv.bgsegm.createBackgroundSubtractorMOG()
while(