第17课 为rtsp流加入移动检测功能

在上节课,我们成功拿到了rtsp视频和音频流,在第13课,我们为普通的usb摄像头加上了移动检测功能,那能不能给rtsp摄像头也加上移动检测功能以实现一些好玩的应用呢?答案是肯定的,在usb摄像头检测中,我们把关键的视频画面数据转化为Mat进行比较处理,在rtsp流的播放中,我们同样是把视频画面数据转化为Mat进行显示,两者都是将图像数据转为Mat进行处理。将图像数据统一转为Mat,可以借助openCV的强大功能对图像进行各种操作,这也是这套教程为什么要基于FFmpeg+openCV进行开发的主要原因。因此,我们只需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::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");}}//缓存上一帧图像oldMat = srcMat.clone();}

3.调试运行,当有行人或光线引起较大面积变化时会提示有物体移动,我们可以在此基础上进一步完善以实现自己想要的功能。

4.思考并继续优化

通过调试实际运行,我们发现检测画面有时会滞后于实时画面,这是怎么回事呢,该如何解决呢?感兴趣的同学好好思考一下尝试自己解决一下吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605333.shtml

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

相关文章

vue结合Cesium加载gltf模型

Cesium支持什么格式&#xff1f; Cesium支持的格式包括&#xff1a;3D模型格式&#xff08;如COLLADA、gITF、OBJ&#xff09;、影像格式&#xff08;如JPEG、PNG、GeoTIFF&#xff09;、地形格式&#xff08;如STL、Heightmap&#xff09;、矢量数据格式&#xff08;如GeoJSON…

css计时器 animation实现计时器延时器

css计时器 animation实现计时器延时器 缺点当切页面导航会休眠不执行 最初需求是一个列表每个项目都有各自的失效时间 然后就想到 计时器延时器轮询等方案 这些方案每一个都要有自己的计时器 感觉不是很好 轮询也占资源 然后突发奇想 css能不能实现 开始想到的是transition测…

初识Linux shell

Linux初探 Linux系统可以划分为4个部分&#xff1a; Linux内核&#xff1a;Linux系统的核心&#xff0c;控制着系统的所有硬件和软件&#xff0c;在必要时分配硬件&#xff0c;并根据需要执行软件。 内核主要功能&#xff1a; 系统内存管理&#xff1a;内核通过硬件上称为交换…

labelImg的安装与使用

目录 1、查看本机是否安装labelImg 2、安装labelImg 3、创建自己的数据集 3.1 建立新文件夹 3.2 打开labelImg 注意&#xff1a;出现闪退的情况处理。 4、文件格式转换 4.1 修改文件夹路径 4.2 新建datasets文件夹 4.3 修改图片路径 4.4 执行 1、查看本机是否安装la…

【Origin绘图1】环形图

环形图绘制 Origin绘制环形图案例 MATLAB绘制环形饼状图案例 参考 环形图如下&#xff0c;可分析不同年份各组分变化情况&#xff1a; Origin绘制环形图 貌似对Origin版本有要求&#xff0c;下载的2019版并无环形图绘制工具。因此&#xff0c;重新下载了2022版本。 案例 第…

Python 利用PYQT5设计基于RSA算法盲签名的匿名化电子支付系统设计与实现

基于RSA算法的盲签名算法 David Chaum 于1982年提出盲签名的概念&#xff0c;并利用RSA算法设计了第一个盲签名方案. 该方案的安全性基于大整数分解问题 盲签名的步骤 1.密钥生成 签名者执行以下步骤生成密钥对: ①签名者选择两个大素数p,q&#xff0c; 计算npq&#xff0…

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

前言 英特尔公司发行的模型部署工具OpenVINO™模型部署套件&#xff0c;可以实现在不同系统环境下运行&#xff0c;且发布的OpenVINO™ 2023最新版目前已经支持MacOS系统并同时支持在苹果M系列芯片上部署模型。在该项目中&#xff0c;我们将向大家展示如何在MacOS系统、M2芯片的…

编写一个简单的服务和客户端(C++)

背景 当节点使用服务进行通信时&#xff0c;发送数据请求的节点称为客户端节点&#xff0c;响应请求的节点称为服务节点。请求和响应的结构由.srv文件确定。 这里使用的例子是一个简单的整数加法系统&#xff1b;一个节点请求两个整数之和&#xff0c;另一个节点响应结果。 …

基于云平台技术的车辆远程诊断浅谈

基于云平台技术的车辆远程诊断浅谈 一、引言 随着汽车工业的不断发展&#xff0c;车辆故障诊断技术的需求日益增长。传统的车辆故障诊断方式已经无法满足现代汽车对高效、智能的追求。基于云平台技术的车辆远程诊断创新&#xff0c;为汽车故障诊断带来了新的解决方案。 二、…

【linux】docker基本概念和基础指令操作(镜像、容器)

docker docker镜像 images xxxx(名称):xxxx(版本号) 每一个image可以生成若干个容器&#xff08;container&#xff09;&#xff0c;所有用相同镜像生成的容器环境完全一样 每一个容器都是一个完全独立的云端服务器 镜像指令 docker pull ubuntu:20.04 #拉取一个镜像 doc…

鸿鹄电子招投标系统源码实现与立项流程:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台

随着企业的快速发展&#xff0c;招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求&#xff0c;建立一个公平、公开、公正的采购环境至关重要。在这个背景下&#xff0c;我们开发了一款电子招标采购软件&#xff0c;以最大限度地控制采购成本&#…

HarmonyOS应用开发者基础(初级)认证题库

开发者能力认证 一、判断 首选项preferences是以Key-Value形式存储数据&#xff0c;其中Key是可以重复。&#xff08;错&#xff09;使用http模块发起网络请求时&#xff0c;必须要使用on(‘headersReceive’&#xff09;订阅请求头&#xff0c;请求才会成功。&#xff08;错…

15.脚本备份、恢复达梦DM数据库

1.备份脚本 #!/bin/bash # 通过docker命令查询达梦数据库容器id CONTAINER_IDdocker ps -a | grep "dm8_single" | awk {print $1} | head -n 1#备份目录 DUMP_DIR"/data/dm8/data/backup"DATE_FORMATdate %Y%m%d echo "备份my_db1数据库开始&#…

从零开始构建一个属于您的 Web3 项目(Web3项目三实战之一)

午后,沏上一壶茶,走到那冬日暖阳照耀到的阳台,落座于桌旁,很是舒心地敲打键盘上的每个按键,这样的午后,或许才是我们所向往的吧! 它舍弃了城市中的喧嚣;也没有大都市的那种快节奏;更加没有了“尔虞我诈、精于算计”的职场“战火硝烟”。 它有的只是寂静、随心所欲、闲…

NFS 共享存储实验

一、服务器部署 第一步、安装nfs和rpcbind包 [rootserver ~]# yum install -y nfs-utils rpcbind截图&#xff1a; 第二步、这里选择一个 lvm 挂载点做 NFS 共享目录 [rootserver ~]# df -HT截图&#xff1a; 第三步、修改配置文件 [rootserver ~]# vi /etc/exports /home …

SpringBoot 接口:响应时间优化9个技巧!

今天聊聊 SpringBoot接口&#xff1a;响应时间优化的9个技巧。在实际开发中&#xff0c;提升接口响应速度是一件挺重要的事&#xff0c;特别是在面临大量用户请求的时候。好了&#xff0c;咱们直接切入正题。 本文&#xff0c;已收录于&#xff0c;我的技术网站 ddkk.com&…

神经网络的核心:简单易懂理解 PyTorch 非线性激活函数

目录 torch.nn子函数非线性激活详解 nn.Softmin Softmin 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.Softmax Softmax 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.Softmax2d Softmax2d 函数简介 函数工作原理 输入…

2024最新前端源码分享(附效果图及在线演示)

分享10款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 粒子文字动画特效 基于canvas实现的粒子文字动画特效 会来回切换设定的文字特效 图…

字典类型存为csv

在Python中把Dict转换为CSV salary [{‘Name’:‘Alice’, ‘Job’:‘Data Scientist’, ‘Salary’:122000}, {‘Name’:‘Bob’, ‘Job’:‘Engineer’, ‘Salary’:77000}, {‘Name’:‘Carl’, ‘Job’:‘Manager’, ‘Salary’:119000}] Method 1 import pandas as pd …

本地jar安装到仓库

安装 jar mvn install:install-file -DgroupId坐标(相对于maven的路径) -DartifactId工程名称 -Dversion版本号 -Dpackagingjar -Dfilejar安装 source mvn install:install-file -DgroupId坐标(相对于maven的路径) -DartifactId工程名称 -Dversion版本号 -Dpackagingjar -Dfi…