1

I've to detect a stationary object in a predefined area using Opencv V4.4.0. I'm working with two background subtractor that store two different background mask, one that store the stationary initial background mask, and one that detect the moving objects as updated mask; I've implemented them using MOG2 background subtractor, but the shadows removal system doesn't seem to works properly.

Instatiation of the two background subtractor MOG2:

Ptr<BackgroundSubtractorMOG2> bgSubtractor;
Ptr<BackgroundSubtractorMOG2> bgSubtractorMotion;

bgSubtractor = createBackgroundSubtractorMOG2(500, 16.0);
bgSubtractor->setDetectShadows(false);
bgSubtractor->setShadowValue(0); 
//bgSubtractor->setShadowThreshold(50);
bgSubtractor->setVarThresholdGen(15);
bgSubtractor->setNMixtures(5);

bgSubtractorMotion = createBackgroundSubtractorMOG2(500, 16.0);
bgSubtractorMotion->setDetectShadows(false); 
bgSubtractorMotion->setShadowValue(0); 

//bgSubtractorMotion->setShadowThreshold(50);
bgSubtractorMotion->setVarThresholdGen(5);
bgSubtractorMotion->setNMixtures(5);

And I call the background removal as below:

// stationary initial background mask

bgSubtractor->apply(sourceFrame, backMaskFrame, 0.0);
blur(backMaskFrame, backMaskFrame, cv::Size(15, 15), cv::Point(-1, -1));
threshold(backMaskFrame, backMaskFrame, 254, 255, THRESH_BINARY);

// updated background mask

bgSubtractorMotion->apply(sourceFrame, backgroundSubtractionUpdatedFrame);

blur(backgroundSubtractionUpdatedFrame, backgroundSubtractionUpdatedFrame, cv::Size(15, 15), cv::Point(-1, -1));
threshold(backgroundSubtractionUpdatedFrame, backgroundSubtractionUpdatedFrame, 254, 255, THRESH_BINARY);

Now, I've to find the stationary objects in the area using the mask of moving object but the system recognize also shadows as stationary object, and this kind of problem doesn't make the system works correctly in daytime with a sunnyday and shadows well defined. I've tried to set the background detector property DetectShadows to false, but this seem be useless. I've tried also to threshold the resulting mask from the stationary background and the updated background, without any results. There is a possible working solution to this problem?

Thanks in advance.

ll_gzr
  • 99
  • 10
  • 2
    You can create your own gaussian ( or some other type) background substractor and try to cutomize it for shadows – Spinkoo Nov 19 '20 at 17:15
  • 2
    check this https://medium.com/arnekt-ai/shadow-removal-with-open-cv-71e030eadaf5 – Spinkoo Nov 19 '20 at 17:17

0 Answers0