第一步:从摄像头采集视频成一帧一帧的图像
函数vecdiocapture capture(0/1);if(!capture.isopen());打开摄像头如果失败就输出“OPEN CAMERA FAIL”
第二步:把当前帧的图像灰度化cvtColor();然后取当前帧的图像与上一帧的图像做差subtract();并且绝对值abs();然后把取完绝对值的图片位深从16变为8 convertTo()最后还要进行阈值化threshold();大于阈值的就赋予该点255否则赋予0 .。
第三步:通过迭代器方法遍历阈值化后的图像的每一个像素点:
cv::Mat_<uchar>::iterator it = resule_grayimg.begin<uchar>();
cv::Mat_<uchar>::iterator itend = resule_grayimg.end<uchar>();
for (; it != itend; ++it)
{
if ((*it)>0) counter += 1;//二值化后,像素点是0或者255
}//如果像素点不为零就累计counter加一。
第四步:通过判断counter像素点的个数判断摄像头拍摄的物体是否由移动,当有移动时相邻两帧图像的差值的绝对值就会大于零,改变量越大差值的绝对值越大。