如何在OpenCV中使用cv::BackgroundSubtractorMOG?
我正在使用OpenCV2.2实现背景减法的运动目标检测。并采用高斯混合模型(GMM)方法对背景参考图像进行建模 我使用OpenCV2.2中提供的cv::BackgroundSubtractorMOG类直接获得前景像素(或前景遮罩)。这很方便,但是cv::BackgroundSubtractorMOG返回的前景掩码不如我预期的好。此外,cv::BackgroundSubtractorMOG的性能似乎不如OpenCV1.0中用C语言编写的GMM方法 以下是我在OpenCV2.2中的代码:如何在OpenCV中使用cv::BackgroundSubtractorMOG?,opencv,computer-vision,background-subtraction,mog,shadow-removal,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::B
cv::BackgroundSubtractorMOG mog;
mog(frame, fgMask, 0.01);
那么,我是不是用错了方法
顺便问一下,cv::BackgroundSubtractorMOG是否对前景像素执行阴影移除
非常感谢。当您创建mog时,您没有定义任何参数,因此它是使用默认参数创建的。每个参数都有一个描述,也许就是这样。试试3,4,5高斯 此函数不执行阴影移除,但您有其他执行此操作的函数。祝你好运 F.X.对的回答给出了
backgroundSubtractor = new BackgroundSubtractorMOG(3, 4, 0.8);
最近有一些去除背景(检测前景)的算法远远优于OpenCV中的标准GMM实现
例如,有一个基于块的分类器级联方法,以及它的基于C++的.< /p> ,我建议使用以下设置来启动。然后可以开始调整参数:
cv::BackgroundSubtractorMOG2 mog;
mog(rawFrame,foregroundFrame,-1);
mog.set("nmixtures", 3);
mog.set("detectShadows",1);
在本例中,我使用3个高斯混合设置MOG2减法器。我还启用了阴影检测。但在我的应用程序上运行速度非常慢。我自己也在寻找一些好的参数。使用这个工具,输入目录结构应该是什么样的?无论我怎么说,readdir()似乎都会出错。下面是3.0文档中关于使用OpenCV背景减法函数的有用概述: