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

 FFmpeg与openCV绝对是绝配。前面我们已经基本熟悉了FFmpeg的工作流程,这一章我们重点来看看openCV。

在前面,我们已经使用openCV打开过摄像头并在MFC中显示图像,但openCV能做的要远超你的想像,比如可以用它来实现人脸检测、车牌识别等,在AI领域,openCV早已声名鹊起。

在实际应用中,我们常需要判断物体是否运动了,这可以利用openCV实现。

1.复制demo4并改名为demo12。

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.mzph.cn/news/599761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Netapp数据恢复】Netapp存储lun被删除如何恢复数据?

Netapp存储数据恢复环境&故障情况&#xff1a; 某单位一台Netapp存储&#xff0c;该Netapp存储内共有数十块SAS硬盘。 工作人员误操作删除了Netapp存储中12个lun&#xff0c;删除的数据包括客户信息和其他重要数据。 Netapp存储数据恢复过程&#xff1a; 1、将故障存储中所…

JS的异步与程序性能相关问题

1、现在与将来 1.1、分块的程序 可以把 JavaScript 程序写在单个 .js 文件中&#xff0c;但是这个程序几乎一定是由多个块构成的。这些块中只有一个是现在执行&#xff0c;其余的则会在将来执行。最常见的块单位是函数 从现在到将来的“等待”&#xff0c;最简单的方法&…

C#利用openvino部署PP-TinyPose人体姿态识别

【官方框架地址】 github.com/PaddlePaddle/PaddleDetection 【算法介绍】 关键点检测算法往往需要部署在轻量化、边缘端设备上&#xff0c;因此长期以来都存在一个难题&#xff1a;精度高、速度则慢、算法体积也随之增加。而PP-TinyPose的出世彻底打破了这个僵局&#xff0c…

43 tmpfs/devtmpfs 文件系统

前言 在 linux 中常见的文件系统 有很多, 如下 基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 闪存文件系统, ubifs, jffs2, yaffs 文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用…

neo4j查询语言Cypher详解(五)--apoc

APOC (Awesome Procedures on Cypher)是一个Neo4j库&#xff0c;它提供了对其他过程和函数的访问&#xff0c;扩展了Cypher查询语言的使用。 apoc MATCH (n:Movie) CALL apoc.create.addLabels( n, [ n.genre ] ) YIELD node REMOVE node.genre RETURN node;附录 参考 apoc…

Selenium库和ChromeDriver谷歌驱动最新版安装

1.安装selenium库 使用pip安装第三方库selenium&#xff0c;速度较慢。 pip install selenium 使用国内清华源安装第三方库selenium&#xff0c;速度较快。 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple 2.安装谷歌浏览器驱动 驱动下载链接&#x…

【生成人工智能】Ray如何解决生成人工智能基础设施的常见生产挑战

这是我们生成人工智能博客系列的第一部分。在这篇文章中&#xff0c;我们讨论了如何使用Ray来生产常见的生成模型工作负载。即将发布的一篇博客将深入探讨Alpa等项目为什么要使用Ray来扩展大型模型。 生成的图像和语言模型有望改变企业的设计、支持、开发等方式。本博客重点关…

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变,Kotlin

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变&#xff0c;Kotlin 设置背景颜色渐变&#xff1a; private var iv: ImageView? nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activit…

如何使用 Python、Node.js 和 Go 创建基于 YOLOv8 的对象检测 Web 服务

1. 介绍 这是有关 YOLOv8 系列文章的第二篇。在上一篇文章中我们介绍了YOLOv8以及如何使用它&#xff0c;然后展示了如何使用 Python 和基于 PyTorch 的官方 YOLOv8 库创建一个 Web 服务来检测图像上的对象。 在本文中&#xff0c;将展示如何在不需要PyTorch和官方API的情况下…

IDEA 2023快捷键

1、main | sout | psvm 2、CTALD 复制当前行 3、ALT SHIFT ↕ 可以把当前行代码进行移动 4、CTRLH 类的继承继承结构 5、CTRLF12 类的成员 6、 SHIFTF6 统一修改变量 7、CTRLATLH 方法调用层级 8、ALT1 是否展示左侧菜单 9、ALTinsert 生成一些代码 10、CTRLP 提示参数…

【React系列】Redux(二)中间件

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 中间件的使用 1.1. 组件中异步请求 在之前简单的案例中&#xff0c;redux中保存的counter是一个本地定义的数据…

给新手的25个建议

前言 最近知乎上&#xff0c;有一位大佬邀请我回答下面这个问题&#xff0c;看到这个问题我百感交集&#xff0c;感触颇多。 在我是新人时&#xff0c;如果有前辈能够指导方向一下&#xff0c;分享一些踩坑经历&#xff0c;或许会让我少走很多弯路&#xff0c;节省更多的学习的…

2024最新阿里云服务器地域(城市)对照表

2024年阿里云服务器地域分布表&#xff0c;地域指数据中心所在的地理区域&#xff0c;通常按照数据中心所在的城市划分&#xff0c;例如华北2&#xff08;北京&#xff09;地域表示数据中心所在的城市是北京。阿里云地域分为四部分即中国、亚太其他国家、欧洲与美洲和中东&…

【Python机器学习】k近邻的优缺点

neighbors分类器有两个重要参数&#xff1a;邻居个数和数据点之间距离的度量方法。实践中使用较小的邻居个数&#xff08;3、5个&#xff09;往往可以取到比较好的结果。 k-NN的优点是易于理解&#xff0c;通常不需要过多调节就可以得到不错的性能&#xff0c;构建模型的速度通…

Nginx 的 gzip 压缩

目录 1. 为什么要开启gzip 压缩 2.对网站配置文件进行修改 1. 为什么要开启gzip 压缩 nginx使用gzip压缩主要是为了降低网站的带宽消耗和提升访问速度。通过对页面进行压缩&#xff0c;可以减少传输的数据量&#xff0c;从而减少网络传输的时间和带宽消耗。 当浏览器接收到压…

Java常用API

一、实体JavaBean 接下来&#xff0c;我们学习一个面向对象编程中&#xff0c;经常写的一种类——叫实体JavaBean类。我们先来看什么是实体类&#xff1f; 1. 什么是实体类&#xff1f; 实体类就是一种特殊的类&#xff0c;它需要满足下面的要求&#xff1a; 接下来我们按照…

burpsuite 爆破

靶场搭建:phpstudy的安装与靶场搭建 - junlin623 - 博客园 (cnblogs.com) 账号字典:XXTK: 一些弱口令、fuzz字典 (gitee.com) 网盘链接:https://pan.baidu.com/s/1v5pAwaTwoeCnJgkUXf3iLQ?pwd=mllm 提取码:mllm --来自百度网盘超级会员V2的分享 一、暴力破解 - 基于…

将Django项目从本地上传至宝塔服务器(踩坑记录)

文章目录 写在前面配置本地文件配置宝塔面板解决遇到问题展示运行结果热门文章 自我介绍 ⭐2022年度CSDN 社区之星 Top6 ⭐2023年度CSDN 博客之星 Top16 ⭐2023年度CSDN 城市之星 Top2&#xff08;苏州&#xff09; ⭐CSDN Python领域 优质创作者 ⭐CSDN 内容合伙人 推荐热门…

jmeter下载及安装配置

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;软件测试面试题分享&#xff1a; 1000道软件测试面试题及答案&#x1f4e2;软件测试实战项目分享&#xff1a; 纯接口项目-完…

lvs+keepalived+nginx实现四层负载+七层负载

目录 一、lvs配置 二、nginx配置 三、测试 3.1 keepalived负载均衡 3.2 lvskeepalived高可用 3.3 nginx高可用 主机IPlvs01-33 11.0.1.33 lvs02-3411.0.1.34nginx0111.0.1.31nginx0211.0.1.32VIP11.0.1.30 4台主机主机添加host [rootnginx01 sbin]# cat /etc/hosts 127.0.0.…