我正在使用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是否对前景像素执行阴影去除?
非常感谢。
答案 0 :(得分:12)
答案 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个高斯混合。我还启用了阴影检测。