在百度网站备案查询上显示未备案是什么意思,网络公关公司,wordpress怎么加属性,东莞 网站 建设在上节课#xff0c;我们成功拿到了rtsp视频和音频流#xff0c;在第13课#xff0c;我们为普通的usb摄像头加上了移动检测功能#xff0c;那能不能给rtsp摄像头也加上移动检测功能以实现一些好玩的应用呢#xff1f;答案是肯定的#xff0c;在usb摄像头检测中#xff0…在上节课我们成功拿到了rtsp视频和音频流在第13课我们为普通的usb摄像头加上了移动检测功能那能不能给rtsp摄像头也加上移动检测功能以实现一些好玩的应用呢答案是肯定的在usb摄像头检测中我们把关键的视频画面数据转化为Mat进行比较处理在rtsp流的播放中我们同样是把视频画面数据转化为Mat进行显示两者都是将图像数据转为Mat进行处理。将图像数据统一转为Mat可以借助openCV的强大功能对图像进行各种操作这也是这套教程为什么要基于FFmpegopenCV进行开发的主要原因。因此我们只需usb摄像头检测功能移植过来就能实现对rtsp摄像头的移动检测了。
1.备份demo16并修改demo16为demo17.
2.移植demo13中的检测代码到本工程视频解码部分
if (normalPkt.stream_index videoIndex){ret avcodec_send_packet(vDecodeCtx, normalPkt);ret avcodec_receive_frame(vDecodeCtx, deVideoFrame);av_packet_unref(normalPkt);ret sws_scale(bgrSwsCtx, (const uint8_t* const*)deVideoFrame-data, deVideoFrame-linesize, 0, deVideoFrame-height, bgrFrame.data, bgrFrame.linesize);srcMat cv::Mat(bgrFrame.height, bgrFrame.width, CV_8UC3, bgrFrame.data[0]);//imshow(video, srcMat);//cv::waitKey(10);mainDlg-drawMatOfPlay(srcMat);av_frame_unref(deVideoFrame);//比较旧图像与新图像if (!oldMat.empty() !srcMat.empty()){ cv::Mat diff, gray, blurred, thresholded, dilated;//计算两帧图像的差异cv::absdiff(oldMat, srcMat, diff); //转换为灰度图像cv::cvtColor(diff, gray, cv::COLOR_BGR2GRAY); //高斯模糊cv::GaussianBlur(gray, blurred, cv::Size(5, 5), 0); //二值化cv::threshold(blurred, thresholded, 20, 255, cv::THRESH_BINARY); //膨胀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);}}//缓存上一帧图像oldMat srcMat.clone();}
3.调试运行当有行人或光线引起较大面积变化时会提示有物体移动我们可以在此基础上进一步完善以实现自己想要的功能。 4.思考并继续优化
通过调试实际运行我们发现检测画面有时会滞后于实时画面这是怎么回事呢该如何解决呢感兴趣的同学好好思考一下尝试自己解决一下吧。