13

我正在使用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

4 回答 4

12

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

此功能不执行阴影去除,但您有其他功能可以执行。祝你好运!

于 2012-06-01T10:52:52.803 回答
5

最近有一些算法可以比 OpenCV 中的标准 GMM 实现更好地去除背景(检测前景)。

例如,这篇期刊文章中描述了一种基于块的分类器级联方法,以及它的基于 C++ 的源代码

于 2013-12-02T04:59:35.353 回答
1

FX 在这个线程上的回答给出了示例参数

backgroundSubtractor = new BackgroundSubtractorMOG(3, 4, 0.8);
于 2013-03-05T06:29:54.920 回答
0

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

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

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

于 2014-02-14T16:12:56.090 回答