2012-11-06 15 views
2

当使用BackgroundSubtractor算法BackgroundSubtractorMOG2时,我试图禁用openCV中的阴影检测。 但是,即使在将bShadowDetection设置为false之后,该算法似乎仍然会将阴影作为前景对象进行跟踪。如何在BackgroundSubtractorMOG2中禁用影子跟踪?

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

我试图调整BackgroundSubtractorMOG2类的不同成员以禁用阴影跟踪而没有机会。 important class members of BackgroundSubtractorMOG2

那些应该关于阴影检测的东西,比如bShadowDetection或fTau,似乎没有效果。文件中的解释也是不够的。

+0

你也许可以跟踪的源代码在OpenCV的\模块\视频\ SRC \ bgfg_gaussmix2.cpp单步调试和运行代码。你有没有尝试从构造函数中设置参数? – james

回答

1

感谢詹姆斯给你的回应。 通过将nShadowDetection设置为0,可以减少任何人遇到相同问题时检测到的阴影量。

mog2.nShadowDetection = 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)!

你必须通过算法创建BackgroundSubtractorMOG2 :: create()方法,并调用设置方法与“detectShadows”等于0

作为一个例子使用:

using namespace cv; 

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

我使用OpenCV 2.4.2,我遇到了同样的问题。最后,我通过使用下面的代码来禁用阴影检测功能:

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