手机端 网站 模板,岳阳网站优化,微信扫码下单小程序怎么做,一步一步教你做网站后台视频FFmpeg与openCV绝对是绝配。前面我们已经基本熟悉了FFmpeg的工作流程#xff0c;这一章我们重点来看看openCV。
在前面#xff0c;我们已经使用openCV打开过摄像头并在MFC中显示图像#xff0c;但openCV能做的要远超你的想像#xff0c;比如可以用它来实现人脸检测、车牌识… FFmpeg与openCV绝对是绝配。前面我们已经基本熟悉了FFmpeg的工作流程这一章我们重点来看看openCV。
在前面我们已经使用openCV打开过摄像头并在MFC中显示图像但openCV能做的要远超你的想像比如可以用它来实现人脸检测、车牌识别等在AI领域openCV早已声名鹊起。
在实际应用中我们常需要判断物体是否运动了这可以利用openCV实现。
1.复制demo4并改名为demo13。
2.修改capCam函数
int fmle::capCam() {videoCap.open(0); cv::Mat frame1, frame2;BOOL ifSuccess videoCap.read(frame1);while (true){BOOL ifSuccess videoCap.read(frame2);cv::Mat diff;cv::absdiff(frame1, frame2, diff); // 计算两帧图像的差异cv::Mat gray;cv::cvtColor(diff, gray, cv::COLOR_BGR2GRAY); // 转换为灰度图像cv::Mat blurred;cv::GaussianBlur(gray, blurred, cv::Size(5, 5), 0); // 高斯模糊cv::Mat thresholded;cv::threshold(blurred, thresholded, 20, 255, cv::THRESH_BINARY); // 二值化cv::Mat dilated;cv::dilate(thresholded, dilated, cv::Mat(), cv::Point(-1, -1), 2); // 膨胀std::vectorstd::vectorcv::Point contours;cv::findContours(dilated, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); // 查找轮廓bool objectMoved false;for (const auto contour : contours){double area cv::contourArea(contour);if (area 1000) // 设置最小轮廓面积阈值{objectMoved true;break;}}if (objectMoved){TRACE(物体移动了\n);cv::putText(dilated, Moving... , cv::Point(0, 40), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2); }else{cv::putText(dilated, Stopping... , cv::Point(0, 40), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);TRACE(物体未移动\n); } frame1 frame2.clone(); // 更新上一帧图像mainDlg-drawMatOfPub(dilated);Sleep(40);} videoCap.release(); return 0;
}3.调试运行当手挥动时会显示Moving停止时则显示Stoping。