如何在BackgroundSubtractorMOG2中禁用阴影跟踪?

时间:2012-11-06 12:08:31

标签: c++ opencv tracking dropshadow background-subtraction

我在使用BackgroundSubtractor算法BackgroundSubtractorMOG2时尝试在openCV中禁用阴影检测。 但是,即使将bShadowDetection设置为false,算法仍然会将阴影跟踪为前景对象。

cv::BackgroundSubtractorMOG2 bg;
bg.nmixtures = 3;
bg.bShadowDetection = false;

我尝试调整BackgroundSubtractorMOG2类的不同成员,以便无法禁用阴影跟踪。 important class members of BackgroundSubtractorMOG2

那些与阴影检测有关的问题,如bShadowDetection或fTau似乎没有效果。文档中的解释也不合适。

3 个答案:

答案 0 :(得分:2)

对于实际使用OpenCV-2.4.3的任何人来说,其他解决方案都不合适,因为参数变量设置为受保护且无法访问。

但即使是当前的OpenCV(2.4.3)API文档也是错误的(http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog2)!

您必须通过Algorithm :: create()方法创建BackgroundSubtractorMOG2,并使用'detectShadows'等于0调用set-method。

作为一个例子使用这个:

using namespace cv;

Ptr<BackgroundSubtractorMOG2> bg =
    Algorithm::create<BackgroundSubtractorMOG2>("BackgroundSubtractor.MOG2");
bg->set("detectShadows", 0);

答案 1 :(得分:1)

感谢詹姆斯的回复。 通过将nShadowDetection设置为0,可以减少检测到的阴影量(如果有人遇到同样的问题)。

mog2.nShadowDetection = 0; 

答案 2 :(得分:0)

我使用OpenCV 2.4.2并且遇到了同样的问题。最后,我可以使用以下代码禁用阴影检测功能:

   cv::BackgroundSubtractorMOG2 m_bg;
   m_bg.set("nmixtures",3);
   m_bg.set("detectShadows", false);