如何使用背景减除方法
-
背景减除(Background Subtraction,BS)是一种常用且广泛使用的技术,用于通过静态相机生成前景掩码(即一张包含场景中属于运动目标的像素的二值图像)。
-
顾名思义,BS 通过在当前帧与背景模型之间执行减除来计算前景掩码,背景模型包含场景的静态部分,或者更一般地,考虑到所观察场景的特征,包含一切可被视为背景的内容。
-
背景建模包括两个主要步骤:
- 背景初始化;
- 背景更新。
在第一步中,计算背景的初始模型,而在第二步中,对该模型进行更新以适应场景中可能发生的变化。
-
在本教程中,我们将学习如何使用 OpenCV 执行 BS。

在本教程中,你将学习如何:
- 使用 cv::VideoCapture 从视频或图像序列读取数据;
- 使用 cv::BackgroundSubtractor 类创建和更新背景模型;
- 使用 cv::imshow 获取并显示前景掩码;
下面你可以找到源代码。我们将让用户选择处理视频文件或图像序列。
我们将在本示例中使用 cv::BackgroundSubtractorMOG2 来生成前景掩码。
结果以及输入数据将显示在屏幕上。
我们讨论上面代码的主要部分:
-
将使用一个 cv::BackgroundSubtractor 对象来生成前景掩码。在本示例中,使用默认参数,但也可以在 create 函数中声明特定的参数。
-
使用一个 cv::VideoCapture 对象来读取输入视频或输入图像序列。
-
每一帧既用于计算前景掩码,也用于更新背景。如果你想更改用于更新背景模型的学习率,可以通过向
apply方法传递参数来设置特定的学习率。 -
可以从 cv::VideoCapture 对象中提取当前帧号,并将其盖印在当前帧的左上角。使用一个白色矩形来突出显示黑色的帧号。
-
我们准备好显示当前输入帧和结果了。
-
对于
vtest.avi视频,以下面的帧为例:对于 MOG2 方法,程序的输出将如下所示(灰色区域是检测到的阴影):
对于 KNN 方法,程序的输出将如下所示(灰色区域是检测到的阴影):

- Background Models Challenge (BMC) 网站
- A Benchmark Dataset for Foreground/Background Extraction [vacavant2013benchmark]