当前位置: 首页 > news >正文

第13课 利用openCV检测物体是否运动了

 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::vector<std::vector<cv::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。

http://www.lryc.cn/news/274528.html

相关文章:

  • C#之反编译之路(一)
  • 使用CentOS 7.6搭建HTTP隧道代理服务器
  • Swift爬虫使用代理IP采集唯品会商品详情
  • 高性价比LDR6028Type-C转3.5mm音频和PD快充转接器
  • 【Docker】docker 服务相关命令
  • 基于SpringBoot的在线问卷调查系统
  • 智能分析网关V4太阳能风光互补远程视频智能监控方案
  • 250:vue+openlayers 加载geotiff文件,并在地图上显示
  • 【JavaEE】多线程(7) -- 线程池的概念和简单实现
  • 集合基础知识点
  • 最新版付费进群系统源码 /同城定位付费进群源码 /自带定位完整版/后台分销站点
  • 【论文阅读笔记】医学多模态新数据集-Large-scale Long-tailed Disease Diagnosis on Radiology Images
  • (C语言)指针的进阶
  • 【网络面试(5)】收发数据及断开服务器(四次挥手)
  • 【Maven】下载及配置
  • 【方法】PPT设置密码后如何修改?
  • 第34期 | GPTSecurity周报
  • 2023新版edge浏览器页面加载不出来的解决办法
  • 算法基础之二分与前缀和 day 6
  • github短视频去除水印项目Douyin_TikTok_Download_API介绍
  • FindMy技术用于键盘
  • 认识jmeter接口测试工具!
  • 强大的按钮类CButtonST
  • 学习ing
  • linux下数据库定时备份
  • Qt/QML编程学习之心得:QSocketNotifier(二十一)
  • 【linux】lsblk和df -h显示的磁盘信息不同
  • 如何开发属于自己的小程序?
  • 湖仓架构的演进
  • 【头歌实训】Spark MLlib ( Python 版 )