![]() |
OpenCV 4.12.0
开源计算机视觉
|
背景减除是许多基于视觉的应用中的主要预处理步骤。 例如,考虑诸如访客计数器之类的情况,其中静态相机拍摄进入或离开房间的访客人数,或交通摄像头提取有关车辆的信息等。在所有这些情况下,首先您需要单独提取人员或车辆。 从技术上讲,您需要从静态背景中提取移动的前景。
如果您只有背景图像,例如没有访客的房间图像,没有车辆的道路图像等,这是一项容易的工作。 只需从背景中减去新图像即可。 您将单独获得前景对象。 但是在大多数情况下,您可能没有这样的图像,因此我们需要从我们拥有的任何图像中提取背景。 当车辆有阴影时,情况会变得更加复杂。 由于阴影也在移动,因此简单的减法也会将其标记为前景。 这使事情复杂化。
OpenCV.js 为此目的实现了一种算法,该算法非常易于使用。
它是一种基于高斯混合的背景/前景分割算法。 它基于 Z.Zivkovic 的两篇论文,分别是 2004 年的“用于背景减除的改进的自适应高斯混合模型”和 2006 年的“用于背景减除任务的每图像像素的有效自适应密度估计”。 该算法的一个重要特征是它为每个像素选择适当的高斯分布数量。 它为适应变化场景(例如光照变化等)提供了更好的适应性。
在编码时,我们使用构造函数:cv.BackgroundSubtractorMOG2 (history = 500, varThreshold = 16, detectShadows = true)
| history | 历史的长度。 |
| varThreshold | 像素与样本之间的平方距离阈值,用于确定像素是否接近该样本。 此参数不影响背景更新。 |
| detectShadows | 如果为 true,则该算法将检测阴影并标记它们。 它会稍微降低速度,因此如果您不需要此功能,请将该参数设置为 false。 |
使用 apply (image, fgmask, learningRate = -1) 方法获取前景掩码
| image | 下一个视频帧。 浮点帧将不进行缩放使用,并且应在 [0,255] 范围内。 |
| fgmask | 作为 8 位二进制图像的输出前景掩码。 |
| learningRate | 介于 0 和 1 之间的值,指示背景模型学习的速度。 负参数值使算法使用一些自动选择的学习率。 0 表示根本不更新背景模型,1 表示从最后一帧完全重新初始化背景模型。 |