Я пытаюсь отключить обнаружение тени в openCV при использовании алгоритма BackgroundSubtractor BackgroundSubtractorMOG2.
Однако даже после установки bShadowDetection в значение false алгоритм все равно отслеживает тени как объекты переднего плана.
cv::BackgroundSubtractorMOG2 bg;
bg.nmixtures = 3;
bg.bShadowDetection = false;
Я попытался настроить различные члены класса BackgroundSubtractorMOG2, чтобы отключить отслеживание теней без шансов. важные члены класса BackgroundSubtractorMOG2
Те, которые должны касаться обнаружения теней, такие как bShadowDetection или fTau, похоже, не имеют никакого эффекта. Объяснение в документации тоже как-то неадекватно.
Для тех, кто на самом деле использует OpenCV-2.4.3, другое решение не подходит, потому что переменные параметров установлены как защищенные и недоступные.
Но даже текущая документация по API OpenCV (2.4.3) неверна (http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog2)
Вам необходимо создать BackgroundSubtractorMOG2 с помощью метода Algorithm :: create () и вызвать метод set с ‘detectShadows’, равным 0.
В качестве примера используйте это:
using namespace cv;
Ptr<BackgroundSubtractorMOG2> bg =
Algorithm::create<BackgroundSubtractorMOG2>("BackgroundSubtractor.MOG2");
bg->set("detectShadows", 0);
Спасибо Джеймс за ответ.
Установив nShadowDetection в 0, можно уменьшить количество обнаруженной тени, если кто-либо когда-либо сталкивался с той же проблемой.
mog2.nShadowDetection = 0;
Я использую OpenCV 2.4.2 и у меня была такая же проблема. Наконец я смог отключить функцию обнаружения теней с помощью кода ниже:
cv::BackgroundSubtractorMOG2 m_bg;
m_bg.set("nmixtures",3);
m_bg.set("detectShadows", false);