OpenCV 4.11.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 方法,程序的输出将如下所示(灰色区域是检测到的阴影)

参考