帧差法的代码:
#define threshold_diff1 10 //设置简单帧差法阈值
#define threshold_diff2 10 //设置简单帧差法阈值
int main(int argc,unsigned char* argv[])
{
Mat img_src1,img_src2,img_src3;//3帧法需要3帧图片
Mat img_dst,gray1,gray2,gray3;
Mat gray_diff1,gray_diff2;//存储2次相减的图片
Mat gray;//用来显示前景的
bool pause=false;
VideoCapture vido_file("1.flv");//在这里改相应的文件名,输入也可以为摄像头设备 输入形式为 '0'
namedWindow("foreground",0);
for (;;)
{
if(!false)
{
vido_file >>img_src1;
cvtColor(img_src1,gray1,CV_BGR2GRAY);
waitKey(5);
vido_file >>img_src2;
cvtColor(img_src2,gray2,CV_BGR2GRAY);
imshow("video_src",img_src2);//
waitKey(5);
vido_file >>img_src3;
cvtColor(img_src3,gray3,CV_BGR2GRAY);
subtract(gray2,gray1,gray_diff1);//第二帧减第一帧
subtract(gray3,gray2,gray_diff2);//第三帧减第二帧
for(int i=0;i
if(abs(gray_diff1.at
gray_diff1.at
else gray_diff1.at
if(abs(gray_diff2.at
gray_diff2.at
else gray_diff2.at
}
bitwise_and(gray_diff1,gray_diff2,gray);
}
char c=(char)waitKey(10);
if (c==27)
{
break;
}
if(c== ' ')
pause=!pause;
}
return 0;
}