imgDif(x,y)<T
然后我们只需遍历图像求出图像中所有白点的个数,即是运动前景的面积,计算一下面积比例即可以确定当前帧是否有物体移动。
当然我们得到的前景目标并不移动的物体的轮廓,而是与前一帧相比目标移动的部分。
下面为这一部分的OpenCV实现,相关的视频读取和写入的操作可以参考OpenCV成长之路中的相关文章。
1 // 查找文件目录下的所有视频文件 2 vector<string> videoPathStr = FindAllFile((videoPath + videoSuffix).c_str(), true); 3 // 先读取一个视频文件,用于获取相关的参数 4 VideoCapture capture(videoPathStr[0]); 5 // 视频大小 6 Size videoSize(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT)); 7 // 创建一个视频写入对象 8 VideoWriter writer("../result.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, videoSize); 9 10 for (auto videoName : videoPathStr) 11 { 12 capture.open(videoName); // 读入路径下的视频 13 14 Mat preFrame; 15 bool stop(false); 16 17 double totleFrameNum = capture.get(CV_CAP_PROP_FRAME_COUNT); // 获取视频总帧数 18 19