I'm attempting to detect motion using frame difference. If there is a motion, I will enter another method, if not, I will not enter that method. The problem is when I make frame difference by using either absdiff(), or bitwise_xor(), I get a noisy frame, that is always detected as a motion.
I tried to remove that noise by using erode() and dilate() methods, it decreases the effect of the noise, but still there is noise. How can I remove this noise ?
Part of my current code:
capture >> Frame; // get a new frame from camera cvtColor(Frame,Frame1,CV_RGB2GRAY); threshold(Frame1,Frame1,50,255,CV_THRESH_BINARY); waitKey(500); capture >> PreFrame; cvtColor(PreFrame,PreFrame,CV_RGB2GRAY); threshold(PreFrame,PreFrame,50,255,CV_THRESH_BINARY); //Result = Frame1 - PreFrame1; //absdiff(Frame1,PreFrame1,Result); bitwise_xor(Frame1,PreFrame,Result); erode(Result,Result,Mat()); dilate(Result,Result,Mat()); imshow("Result",Result); if (norm(Result,NORM_L1)==0){ printf(" no change \n") } else { // motion detected }