我在使用BackgroundSubtractor算法BackgroundSubtractorMOG2时尝试在openCV中禁用阴影检测。 但是,即使将bShadowDetection设置为false,算法仍然会将阴影跟踪为前景对象。
cv::BackgroundSubtractorMOG2 bg;
bg.nmixtures = 3;
bg.bShadowDetection = false;
我尝试调整BackgroundSubtractorMOG2类的不同成员,以便无法禁用阴影跟踪。 important class members of BackgroundSubtractorMOG2
那些与阴影检测有关的问题,如bShadowDetection或fTau似乎没有效果。文档中的解释也不合适。
答案 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);