目标
在这一章当中,
我们将熟悉OpenCV中的背景减法方法。
基础
背景扣除是许多基于视觉的应用程序中的主要预处理步骤。例如,考虑一些情况,例如访客计数器,其中静态相机拍摄进入或离开房间的访客数量,或交通相机提取有关车辆等的信息。在所有这些情况下,首先需要单独提取人员或车辆。从技术上讲,你需要从静态背景中提取移动的前景。
如果你只有背景图像,比如没有游客的房间图像,没有车辆的道路图像等,这是一件容易的事情。只需从背景中减去新的图像。你只能看到前景物体。但在大多数情况下,您可能没有这样的图像,所以我们需要从我们拥有的任何图像中提取背景。车辆出现阴影时,情况会变得更加复杂。由于阴影也在移动,所以简单的减法将其标记为前景。它使事情变得复杂。
为此目的引入了几种算法。OpenCV已经实现了三种非常易于使用的算法。我们将逐一看到他们。
BackgroundSubtractorMOG
这是一个基于高斯混合的背景/前景分割算法。它是在P. KadewTraKuPong和R. Bowden于2001年发表的论文“用于实时跟踪阴影检测的改进自适应背景混合模型”一文中介绍的。它使用一种方法通过K个高斯分布的混合对每个背景像素进行建模( K = 3至5)。混合物的权重表示这些颜色留在场景中的时间比例。可能的背景颜色是保持更长和更静态的颜色。
在编码时,我们需要使用函数cv2.createBackgroundSubtractorMOG()创建背景对象。它有一些可选的参数,如历史长度,高斯混合的数量,阈值等。它们都被设置为一些默认值。然后在视频循环中,使用backgroundsubtractor.apply()方法获取前景蒙板。
看一个简单的例子如下: