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