フレームの違いを使って動きを検出しようとしています。動きがある場合は別の方法を入力し、ない場合はその方法を入力しません。問題は、absdiff()またはbitwise_xor()のいずれかを使用してフレームの違いを作成すると、ノイズの多いフレームが取得され、常にモーションとして検出されることです。
erode()メソッドとdilate()メソッドを使用してそのノイズを除去しようとしました。ノイズの影響は減少しますが、それでもノイズがあります。このノイズを取り除くにはどうすればよいですか?
私の現在のコードの一部:
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
}