opencv检测运动物体

检测到的所有移动物体中轮廓中找到面积最大的轮廓,并绘制这个轮廓的矩形框。

#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 打开视频文件或摄像头cv::VideoCapture capture;capture.open("move3.mp4"); // 打开视频文件if (!capture.isOpened()) {std::cerr << "Error opening video stream or file" << std::endl;return -1;}// 读取第一帧作为背景模型cv::Mat background;capture >> background;if (background.empty()) {std::cerr << "Error reading background frame" << std::endl;return -1;}// 将背景转换为灰度图并进行高斯滤波以减少噪声cv::Mat backgroundGray;cv::cvtColor(background, backgroundGray, cv::COLOR_BGR2GRAY);cv::GaussianBlur(backgroundGray, backgroundGray, cv::Size(21, 21), 0);cv::Mat frame, grayFrame, diffFrame, thresholdFrame;while (true) {// 读取当前帧capture >> frame;if (frame.empty()) {break;}// 将当前帧转换为灰度图并进行高斯滤波cv::Mat grayFrame;cv::cvtColor(frame, grayFrame, cv::COLOR_BGR2GRAY);cv::GaussianBlur(grayFrame, grayFrame, cv::Size(21, 21), 0);// 计算当前帧与背景的差异cv::absdiff(backgroundGray, grayFrame, diffFrame);// 对差异图像进行阈值处理,将小的差异值设置为0,大的差异值设置为255cv::threshold(diffFrame, thresholdFrame, 25, 255, cv::THRESH_BINARY);// 使用形态学操作去除噪声cv::Mat kernel = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(3, 3));cv::morphologyEx(thresholdFrame, thresholdFrame, cv::MORPH_OPEN, kernel);// 找到轮廓std::vector<std::vector<cv::Point>> contours;cv::findContours(thresholdFrame, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);// 找到面积最大的轮廓double maxArea = 0;int maxAreaIndex = -1;for (size_t i = 0; i < contours.size(); ++i) {double area = cv::contourArea(contours[i]);if (area > maxArea) {maxArea = area;maxAreaIndex = i;}}// 在原始帧上绘制最大的矩形框if (maxAreaIndex != -1) {cv::Rect boundingRect = cv::boundingRect(contours[maxAreaIndex]);cv::rectangle(frame, boundingRect, cv::Scalar(0, 0, 255), 2);}// 显示结果cv::imshow("Frame", frame);cv::imshow("Threshold Frame", thresholdFrame);// 按下ESC键退出if (cv::waitKey(30) == 27) {break;}}// 释放资源并关闭窗口capture.release();cv::destroyAllWindows();return 0;
}

代码说明

  1. 背景初始化

    • 读取第一帧作为背景,并将其转换为灰度图,同时应用高斯滤波以减少噪声。
  2. 帧处理

    • 读取当前帧并将其转换为灰度图。
    • 使用 cv::absdiff 计算当前帧与背景的差异。
    • 应用阈值处理,将小的差异值设置为0,大的差异值设置为255。
    • 使用形态学操作去除噪声。
  3. 轮廓检测

    • 使用 cv::findContours 找到所有运动物体的轮廓。
    • 遍历所有轮廓,计算每个轮廓的面积,并找到面积最大的轮廓。
  4. 绘制矩形框

    • 使用 cv::boundingRect 计算最大轮廓的边界矩形。
    • 使用 cv::rectangle 在原始帧上绘制红色矩形框,标记面积最大的运动物体。
  5. 结果显示

    • 显示原始帧和处理后的阈值帧。

注意事项

  • 阈值调整:阈值可以根据实际场景进行调整,以提高检测的准确性。
  • 性能优化:对于实时应用,可以考虑优化代码以提高处理速度。
  • 背景更新:在实际应用中,背景可能会发生变化,因此可能需要定期更新背景模型。

通过以上修改,你的程序应该只会在检测到的运动物体中绘制面积最大的矩形框。

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

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

相关文章

Camera相机人脸识别系列专题分析之十五:人脸特征检测FFD算法之libcvface_api.so算法API详细注释解析

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: Camera相机人脸识别系列专题分析之十五:人脸特征检测FFD算法之libcvface_api.so算法API详细注释解析 目录 一、libcvface_api.so算法API详细注释解析

图像擦除论文-2:SmartEraser、Erase Diffusion、OmniEraser

图像生成模型应用系列——图像擦除&#xff1a; 图像擦除论文-1&#xff1a;PixelHacker、PowerPanint等 图像擦除论文-2&#xff1a;擦除类型数据集构建(1) Erase Diffusion Erase Diffusion: Empowering Object Removal Through Calibrating Diffusion Pathways https://git…

九识无人车陕西运营中心展厅启幕 打造智能城配物流新标杆

7月1日&#xff0c;九识无人车陕西运营中心展厅正式开业&#xff0c;全国业务版图再添重要一子。这座展厅是九识在陕西省的首家展厅&#xff0c;由九识第一位正式提车的客户、首位代理商伙伴孙朋奇先生打造。展厅集产品展示与技术体验于一体&#xff0c;成为西北地区城配领域自…

AI智能体|扣子(Coze)搭建【沉浸式历史故事解说视频】工作流

主包讲解历史对我们的好处&#xff0c;纯个人观点&#xff01; 这个世界是存在一些规律的&#xff0c;很多东西并不能够通过自己的聪明去创新&#xff0c;去改变的。 无论你怎么样创新&#xff0c;你都会回到哪个规律中去&#xff0c;比如很多人做一些商业模式的创新&#xff0…

Softhub软件下载站实战开发(十):实现图片视频上传下载接口

文章目录 Softhub软件下载站实战开发&#xff08;十&#xff09;&#xff1a;实现图片视频上传下载接口 &#x1f5bc;️&#x1f3a5;系统架构图核心功能设计 &#x1f6e0;️1. 文件上传流程2. 关键技术实现2.1 雪花算法2.2 文件校验机制 ✅2.3 文件去重机制 &#x1f50d;2.…

[JS逆向] 喜马拉雅登录案例 -- 补环境

博客配套代码发布于github&#xff1a;喜马拉雅登录 &#xff08;欢迎顺手Star一下⭐&#xff09; 相关知识点&#xff1a;webpack 补环境 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 逆向知识点合集 此案例目标为逆向成功对应的参数&#xff0c…

大语言模型推理系统综述

摘要 近年来&#xff0c;随着 ChatGPT 等服务推动大语言模型&#xff08;LLM&#xff09;的快速普及&#xff0c;一批专门面向 LLM 推理的系统相继涌现&#xff0c;如 vLLM、SGLang、Mooncake 和 DeepFlow。这些系统设计工作的核心动因是 LLM 请求处理过程中所特有的自回归特性…

用Firecrawl轻松获取网站数据,提升AI应用的效率!

&#x1f525; Firecrawl&#xff1a;助力AI应用的强大工具&#xff01; 在数字化信息爆炸的时代&#xff0c;如何高效地从海量网页中提取有用数据变得尤其重要。Firecrawl的问世&#xff0c;为我们揭开了一种便捷的方法来应对这一挑战。它不仅能够将整个网站的数据转化为适用…

【王阳明代数讲义】谷歌编程智能体Gemini CLI 使用指南、架构详解与核心框架分析

Gemini CLI 使用指南、架构详解与核心框架分析 Gemini CLI 使用指南、架构详解与核心框架分析Gemini CLI 使用指南Gemini CLI 架构详解Gemini CLI 核心框架总结 Gemini CLI 使用指南、架构详解与核心框架分析 Gemini CLI 使用指南 1. 安装与配置 环境要求&#xff1a; Node.…

camera调试:安卓添加xml注册

对接安卓的平台时&#xff0c;需要注册对应的camera设备&#xff0c;供安卓标准api进行操作&#xff0c;rk的平台需要在HAL层配置camera3_profiles.xml文件&#xff0c;适配驱动的信息&#xff0c;进行注册camera设备。该xml对应的内容很多&#xff0c;很多CTS测试问题都是该文…

使用 Ansys Discovery 为初学者准备几何结构

介绍 设计几何体通常会包含一些特征&#xff0c;使其无法直接导入我们的仿真工具&#xff0c;例如 Ansys Mechanical、LS-DYNA、Fluent 等。有些干扰或错位虽然适合制造&#xff0c;但在我们的仿真工具中却会造成问题。有时&#xff0c;一些小特征&#xff08;例如孔或圆角&am…

推客系统全栈开发指南:从架构设计到商业化落地

一、推客系统概述 推客系统&#xff08;TuiKe System&#xff09;是一种结合社交网络与内容分发的创新型平台&#xff0c;旨在通过用户间的相互推荐机制实现内容的高效传播。这类系统通常包含用户关系管理、内容发布、智能推荐、数据分析等核心模块&#xff0c;广泛应用于电商…

大数据开发实战:如何做企业级的数据服务产品

1.背景 数据服务通常以解决方案的形式进行组织&#xff0c;面向一个应用场景的所有数据需求或数据内容可以通过一个解决方案进行封装&#xff0c;统一对外服务。一个数据需求或数据接口以一个数据服务实例的形式存在于解决方案之下。 下游消费方可以通过统一API进行数据消费&…

基于IndexTTS的零样本语音合成

IndexTTS 项目采用模块化设计&#xff0c;将 BPE 文本编码、GPT 单元预测、dVAE 语音特征抽取和 BigVGAN 音频生成串联为完整的语音合成流程。系统通过统一的配置文件和模型目录规范&#xff0c;实现高效的文本到语音转换&#xff0c;支持命令行与 Web 界面双模式操作&#xff…

基于go-zero的短链生成系统

go-zero框架 gozero&#xff08;又称go-zero&#xff09;是一款由知名开发者kevwan设计的Golang微服务框架&#xff0c;专注于高性能、低延迟和易用性。其核心目标是简化分布式系统的开发&#xff0c;提供开箱即用的工具链&#xff0c;涵盖API网关、RPC服务、缓存管理、数据库…

Linux-修改线上MariaDB服务端口号

准备工作&#xff08;很重要&#xff01;&#xff01;&#xff01;&#xff09;&#xff1a; 提前做好Linux服务器快照 提前做好数据库数据备份 1. 修改配置文件 首先&#xff0c;我们需要找到MariaDB的配置文件。通常情况下&#xff0c;这个文件位于以下位置&#xff1a;…

Spring Cloud 微服务(负载均衡策略深度解析)

&#x1f4cc; 摘要 在微服务架构中&#xff0c;负载均衡是实现高可用、高性能服务调用的关键机制之一。Spring Cloud 提供了基于客户端的负载均衡组件 Ribbon&#xff0c;结合 Feign 和 OpenFeign&#xff0c;实现了服务间的智能路由与流量分配。 本文将深入讲解 Spring Clo…

HTML/CSS基础

1.html:超文本标记语言。它是一种标识性的语言&#xff0c;非编程语言&#xff0c;不能使用逻辑运算。通过标签将网络上的文本格式进行统一&#xff0c;使用分散网络资源链接为一个逻辑整体&#xff0c;属于标记语言。 超文本&#xff1a;就是指页面内可以包含图片&#xff0…

C# 事件驱动编程的核心:深度解析发布者_订阅者模式

适用场景&#xff1a;GUI交互、消息队列、微服务通信等需要解耦事件生产与消费的系统 &#x1f9e9; 模式核心组件解析 发布者&#xff08;Publisher&#xff09; 作用&#xff1a;定义事件并管理订阅者列表关键行为&#xff1a; 提供和-运算符注册/注销订阅者通过Invoke()方…

华为云Flexus+DeepSeek征文 | 从零开始搭建Dify-LLM应用开发平台:华为云全流程单机部署实战教程

华为云FlexusDeepSeek征文 | 从零开始搭建Dify-LLM应用开发平台&#xff1a;华为云全流程单机部署实战教程 前言一、华为云Dify-LLM平台介绍1. Dify-LLM解决方案简介2. Dify-LLM解决方案地址3. Dify-LLM单机架构介绍4. 预估成本说明 二、华为云Maas平台介绍1. 华为云ModelArts …