OpenCV  4.10.0
开源计算机视觉库
加载中...
搜索中...
无匹配项
如何使用背景减除方法

上一教程: 高级拼接 API(Stitcher 类)
下一教程: 均值漂移和 CamShift

原始作者Domenico Daniele Bloisi
兼容性OpenCV >= 3.0
  • 背景减除(BS)是一种常用的技术,它通过使用静态摄像头生成前景掩码(即包含场景中移动物体像素的二值图像)。
  • 顾名思义,BS 通过对当前帧和背景模型进行减除运算来计算前景掩码。背景模型包含场景的静态部分,或者更一般地说,包含所有可以被视为背景的东西,这取决于观察到的场景的特性。
  • 背景建模主要包括两个步骤:

    1. 背景初始化;
    2. 背景更新。

    在第一步中,计算背景的初始模型,而在第二步中,更新该模型以适应场景中可能发生的改变。

  • 在本教程中,我们将学习如何使用 OpenCV 进行 BS。

目标

在本教程中,您将学习如何:

  1. 使用 cv::VideoCapture 从视频或图像序列中读取数据;
  2. 使用 cv::BackgroundSubtractor 类创建和更新背景模型;
  3. 使用 cv::imshow 获取和显示前景掩码;

代码

在下面,您可以找到源代码。我们将让用户选择处理视频文件或图像序列。

在本示例中,我们将使用 cv::BackgroundSubtractorMOG2 来生成前景掩码。

结果以及输入数据将显示在屏幕上。

解释

我们讨论上面代码的主要部分

  • 一个 cv::BackgroundSubtractor 对象将用于生成前景掩码。在这个例子中,使用默认参数,但也可以在创建函数中声明特定参数。
  • 一个 cv::VideoCapture 对象用于读取输入视频或输入图像序列。
  • 每一帧都用于计算前景掩码和更新背景。如果你想改变用于更新背景模型的学习率,可以通过向 apply 方法传递参数来设置特定的学习率。
  • 当前帧号可以从 cv::VideoCapture 对象中提取并加盖在当前帧的左上角。一个白色矩形用于突出显示黑色帧号。
  • 我们已经准备好显示当前输入帧和结果。

结果

  • 使用 vtest.avi 视频,对于以下帧

程序的输出将如下所示,用于 MOG2 方法(灰色区域是检测到的阴影)

程序的输出将如下所示,用于 KNN 方法(灰色区域是检测到的阴影)

参考资料