3

我试图在使用 BackgroundSubtractor 算法 BackgroundSubtractorMOG2 时禁用 openCV 中的阴影检测。然而,即使将 bShadowDetection 设置为 false,该算法似乎仍将阴影作为前景对象进行跟踪。

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

我试图调整 BackgroundSubtractorMOG2 类的不同成员,以便毫无机会地禁用阴影跟踪。BackgroundSubtractorMOG2 的重要类成员

那些应该与阴影检测有关的东西,例如 bShadowDetection 或 fTau 似乎没有效果。文档中的解释在某种程度上也不够充分。

4

3 回答 3

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 方法。

作为一个例子使用这个:

using namespace cv;

Ptr<BackgroundSubtractorMOG2> bg =
    Algorithm::create<BackgroundSubtractorMOG2>("BackgroundSubtractor.MOG2");
bg->set("detectShadows", 0);
于 2013-01-31T12:25:42.427 回答
1

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

mog2.nShadowDetection = 0; 
于 2012-11-21T09:14:59.710 回答
0

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

   cv::BackgroundSubtractorMOG2 m_bg;
   m_bg.set("nmixtures",3);
   m_bg.set("detectShadows", false);
于 2015-06-14T19:45:46.330 回答