如何在OpenCV中使用cv :: BackgroundSubtractorMOG?

时间:2012-05-05 03:39:28

标签: opencv computer-vision background-subtraction mog shadow-removal

我正在使用OpenCV2.2用背景减法的方法实现移动物体检测。我使用高斯混合模型(GMM)方法来模拟背景参考图像。

我通过使用OpenCV2.2中提供的类cv :: BackgroundSubtractorMOG直接获取前景像素(或前景蒙版)。这很方便,但是cv :: BackgroundSubtractorMOG返回的前景掩码不如我预期的那么好。此外,似乎cv :: BackgroundSubtractorMOG的性能比用OpenCV1.0中提供的C语言编写的GMM方法差。

以下是我在OpenCV2.2中的代码:

cv::BackgroundSubtractorMOG mog;
mog(frame, fgMask, 0.01);

那么,我是否以错误的方式使用该方法?

顺便说一句,cv :: BackgroundSubtractorMOG是否对前景像素执行阴影去除?

非常感谢。

4 个答案:

答案 0 :(得分:12)

创建mog时,您没有定义任何参数,因此使用默认参数创建它。 Here你有每个参数的描述,也许就是这样。尝试使用3,4,5高斯。

此功能不会执行阴影删除,但您具有this其他功能。祝你好运!

答案 1 :(得分:5)

最近的算法删除了背景(检测前景)远远优于OpenCV中的标准GMM实现。

例如,this journal article中描述了一种基于块的分类器级联方法,以及基于C ++的source code

答案 2 :(得分:1)

F.X.对this thread的回答给出了

的样本参数
backgroundSubtractor = new BackgroundSubtractorMOG(3, 4, 0.8);

答案 3 :(得分:0)

我建议您使用以下设置开始使用。然后你可以开始调整参数:

cv::BackgroundSubtractorMOG2 mog;
mog(rawFrame,foregroundFrame,-1);
mog.set("nmixtures", 3);
mog.set("detectShadows",1);   

在这个例子中,我将MOG2减法器设置为3个高斯混合。我还启用了阴影检测。