OpenCV 4.10.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 位二进制图像。(fgmask = foreground mask,前景蒙版) |
learningRate | 一个在 0 至 1 之间的值,表示学习背景模型的速度。负的参数值会使算法采用自动选择学习率。0 意味着背景模型完全没有更新,1 意味着从最后一帧完全重新初始化背景模型。 |