[C++]使用纯opencv部署yolov11目标检测onnx模型
yolov11官方框架:https://github.com/ultralytics/ultralytics
【算法介绍】
在C++中使用纯OpenCV部署YOLOv11进行目标检测是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTorch模型。然而,你可以通过一些间接的方法来实现这一目标,比如将PyTorch模型转换为ONNX格式,然后使用OpenCV的DNN模块加载ONNX模型。
以下是一个大致的步骤指南,用于在C++中使用OpenCV部署YOLOv11(假设你已经有了YOLOv11的ONNX模型):
- 安装依赖:
- 确保你的开发环境已经安装了OpenCV 4.x(带有DNN模块)和必要的C++编译器。
- 准备模型:
- 将YOLOv11模型从PyTorch转换为ONNX格式。这通常涉及使用PyTorch的
torch.onnx.export函数。 - 确保你有YOLOv11的ONNX模型文件、配置文件(描述模型架构)和类别名称文件。
- 将YOLOv11模型从PyTorch转换为ONNX格式。这通常涉及使用PyTorch的
- 编写C++代码:
- 使用OpenCV的DNN模块加载ONNX模型。
- 预处理输入图像(如调整大小、归一化等),以符合模型的输入要求。
- 将预处理后的图像输入到模型中,并获取检测结果。
- 对检测结果进行后处理,包括解析输出、应用非极大值抑制(NMS)和绘制边界框。
- 编译和运行:
- 使用C++编译器(如g++)编译你的代码。
- 运行编译后的程序,输入图像或视频,并观察目标检测结果。
需要注意的是,由于YOLOv11是一个复杂的模型,其输出可能包含多个层的信息(如特征图、置信度、边界框坐标等),因此你需要仔细解析模型输出,并根据YOLOv11的具体实现进行后处理。
此外,由于OpenCV的DNN模块对ONNX的支持可能有限,某些YOLOv11的特性(如自定义层、特定的激活函数等)可能无法在OpenCV中直接实现。在这种情况下,你可能需要寻找替代方案,如使用其他深度学习库(如TensorRT、ONNX Runtime等)来加载和运行模型,并通过C++接口与这些库进行交互。
总之,在C++中使用纯OpenCV部署YOLOv11是一项具有挑战性的任务,需要深入理解YOLOv11的模型架构、OpenCV的DNN模块以及ONNX格式。如果你不熟悉这些领域,可能需要花费更多的时间和精力来学习和解决问题。
【效果展示】

【测试环境】
vs2019
cmake==3.24.3
opencv==4.8.0
【部分实现代码】
#include <iostream>
#include<opencv2/opencv.hpp>#include<math.h>
#include "yolov11.h"
#include<time.h>
#define VIDEO_OPENCV //if define, use opencv for video.using namespace std;
using namespace cv;
using namespace dnn;template<typename _Tp>
int yolov11(_Tp& cls,Mat& img,string& model_path)
{Net net;if (cls.ReadModel(net, model_path, false)) {cout << "read net ok!" << endl;}else {return -1;}//生成随机颜色vector<Scalar> color;srand(time(0));for (int i = 0; i < 80; i++) {int b = rand() % 256;int g = rand() % 256;int r = rand() % 256;color.push_back(Scalar(b, g, r));}vector<OutputSeg> result;if (cls.Detect(img, net, result)) {DrawPred(img, result, cls._className, color);}else {cout << "Detect Failed!" << endl;}system("pause");return 0;
}template<typename _Tp>
int video_demo(_Tp& cls, string& model_path)
{vector<Scalar> color;srand(time(0));for (int i = 0; i < 80; i++) {int b = rand() % 256;int g = rand() % 256;int r = rand() % 256;color.push_back(Scalar(b, g, r));}vector<OutputSeg> result;cv::VideoCapture cap("D:\\car.mp4");if (!cap.isOpened()){std::cout << "open capture failured!" << std::endl;return -1;}Mat frame;
#ifdef VIDEO_OPENCVNet net;if (cls.ReadModel(net, model_path, true)) {cout << "read net ok!" << endl;}else {cout << "read net failured!" << endl;return -1;}#elseif (cls.ReadModel(model_path, true)) {cout << "read net ok!" << endl;}else {cout << "read net failured!" << endl;return -1;}#endifwhile (true){cap.read(frame);if (frame.empty()){std::cout << "read to end" << std::endl;break;}result.clear();
#ifdef VIDEO_OPENCVif (cls.Detect(frame, net, result)) {DrawPred(frame, result, cls._className, color, true);}
#elseif (cls.OnnxDetect(frame, result)) {DrawPred(frame, result, cls._className, color, true);}
#endifint k = waitKey(10);if (k == 27) { //esc break;}}cap.release();system("pause");return 0;
}int main() {string detect_model_path = "./yolo11n.onnx";Yolov11 detector;video_demo(detector, detect_model_path);
}
【视频演示】
C++使用纯opencv部署yolov11目标检测onnx模型演示源码+模型_哔哩哔哩_bilibili【测试环境】vs2019cmake==3.24.3opencv==4.8.0更多实现细节和源码下载参考博文https://blog.csdn.net/FL1623863129/article/details/142688868, 视频播放量 1、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:用C#部署yolov8的tensorrt模型进行目标检测winform最快检测速度,将yolov5-6.2封装成一个类几行代码完成语义分割任务,C++使用纯opencv去部署yolov8官方obb旋转框检测,使用C#的winform部署yolov8的onnx实例分割模型,超变态的AI换脸工具,解除限制!解锁高级功能!,YOLOv8检测界面-PyQt5实现,基于onnx模型加密与解密深度学习模型保护方法介绍,基于opencv封装易语言读写视频操作模块支持视频读取和写出,使用易语言调用opencv进行视频和摄像头每一帧处理,使用纯opencv部署yolov5目标检测模型onnx
https://www.bilibili.com/video/BV1Nc4LekE1d/
【源码下载】
https://download.csdn.net/download/FL1623863129/89837170
相关文章:
[C++]使用纯opencv部署yolov11目标检测onnx模型
yolov11官方框架:https://github.com/ultralytics/ultralytics 【算法介绍】 在C中使用纯OpenCV部署YOLOv11进行目标检测是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTor…...
【Golang】Go 语言中的 time 包详解:全面掌握时间处理与应用
在 Go 语言中,time 包提供了强大的时间处理功能,适用于各种场景:获取当前时间、格式化和解析时间、计算时间间隔、设置定时器、处理超时等。在开发过程中,熟练掌握 time 包能够帮助我们轻松处理时间相关的操作,尤其是定…...
MySQL联合索引、索引下推Demo
1.联合索引 测试SQL语句如下:表test中共有4个字段(id, a, b, c),id为主键 drop table test;#建表 create table test(id bigint primary key auto_increment,a int,b int,c int )#表中插入数据 insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,…...
linux上复制命令cp的常见用法-ubuntu
在Ubuntu中,cp命令是用于复制文件和目录的基本命令。以下是cp命令的常见用法和选项: 基本语法 cp [选项] 源文件 目标文件常用选项 -r 或 -R:递归复制目录及其内容。-p:保留源文件的属性(如权限、所有者、时间戳&am…...
R语言绘制气泡图
气泡图是一种数据可视化图表。它通常在二维或三维空间中展示数据。两个变量决定气泡在平面或空间中的位置,第三个变量则以气泡大小呈现。能直观反映三个变量间关系,帮助用户快速理解数据特征和趋势,在数据分析和展示中广泛应用。 0x01 使用s…...
c++ sparsetable 模版
闭区间查询 支持 区间最大 区间最小 区间和 区间最大下标 区间最小下标 #include <bits/stdc.h> using namespace std;#ifndef NO_UNIQUE_ADDRESS # ifdef __has_cpp_attribute # if __has_cpp_attribute(no_unique_address) # define NO_UNIQUE_…...
创建线程池和封装锁
封装一个锁 1.封装一个Mutex class Mutex{public:Mutex(pthread_mutex_t * lock):_lock(lock){}void Lock(){pthread_mutex_lock(_lock);}void unLock(){pthread_mutex_unlock(_lock);}~Mutex(){}private:pthread_mutex_t *_lock; };2.封装一个LockGuard class LockGuard{pub…...
易图讯军用VR三维电子沙盘系统
深圳易图讯军用VR三维电子沙盘系统是一种集成了虚拟现实(VR)技术、三维建模技术、大数据分析、实时动态更新以及高度安全可靠的综合性军事指挥平台。该系统通过高精度三维模型真实再现战场环境,为指挥员提供沉浸式体验和交互操作的可能性&…...
LeetCode讲解篇之70. 爬楼梯
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 爬楼梯有一个规律,爬到第n层楼梯的方法种数 爬到第n - 1层楼梯的方法种数 爬到第n - 1层楼梯的方法种数 也就是我们爬到第n层楼梯其实是从第n - 1层楼梯向上爬1层或者是n - 2层楼梯向上爬2层转换来…...
论文写作不再难,论文初稿快速成型法!
撰写论文是每个学者的必修课,我非常明白撰写论文的不易。撰写过程中会遇到各种困扰,如思路不清晰、论证不充分、语言表达不准确等。在这里以我的经验分享给大家一个能快速完成论文初稿的秘诀“AI导师写作”,希望能帮助还在为论文发愁的你。 …...
linux系统,监控进程运行状态并自动重启崩溃后的进程的多种方法
系统进程运行异常崩溃后,自动重启的方法 有的公司,会写monitor守护进程,监视各个进程的运行状态,异常时,自动重启,但是这种,通过一个进程 监护一个进程的做法,不太完美,…...
【JavaEE初阶】深入理解不同锁的意义,synchronized的加锁过程理解以及CAS的原子性实现(面试经典题);
前言 🌟🌟本期讲解关于锁的相关知识了解,这里涉及到高频面试题哦~~~ 🌈上期博客在这里:【JavaEE初阶】深入理解线程池的概念以及Java标准库提供的方法参数分析-CSDN博客 🌈感兴趣的小伙伴看一看小编主页&am…...
详解Redis分布式锁在SpringBoot的@Async方法中没锁住的坑
背景 Redis分布式锁很有用处,在秒杀、抢购、订单、限流特别是一些用到异步分布式并行处理任务时频繁的用到,可以说它是一个BS架构的应用中最高频使用的技术之一。 但是我们经常会碰到这样的一个问题,那就是我们都按照标准做了但有时运行着、…...
怎么做接口自动化测试
在分层测试的“金字塔”模型中,接口测试属于第二层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比࿰…...
网络编程(18)——使用asio协程实现并发服务器
十八、day18 到目前为止,我们以及学习了单线程同步/异步服务器、多线程IOServicePool和多线程IOThreadPool模型,今天学习如何通过asio协程实现并发服务器。 并发服务器有以下几种好处: 协程比线程更轻量,创建和销毁协程的开销较…...
Koa2项目实战2(路由管理、项目结构优化)
添加路由(处理不同的URL请求) 路由:根据不同的URL,调用对应的处理函数。 每一个接口服务,最核心的功能是:根据不同的URL请求,返回不同的数据。也就是调用不同的接口返回不同的数据。 在 Node…...
决战Linux操作系统
前言: 你是否也曾经为Linux所困扰过,在网上找的资料零零散散,是否学完Linux后还是懵懵懂懂,别怕,这篇博客是博主精心为你准备的,现在,就让我们一起来走进Linux的世界,决战Linux&…...
OceanBase 3.2.2 数据库问题处理记录
只记录OceanBase 数据库与OCP的异常处理,其它组件暂时不写录。 一、问题1: 说明:OMS 出现异常,无法访问(OB无法访问) OB数据库架构:1:1:1 原因:某一台OBserver因为内存问题,被服务器直接kill掉…...
HCIP--以太网交换安全(二)端口安全
端口安全 一、端口安全概述 1.1、端口安全概述:端口安全是一种网络设备防护措施,通过将接口学习的MAC地址设为安全地址防止非法用户通信。 1.2、端口安全原理: 类型 定义 特点 安全动态MAC地址 使能端口而未是能Stichy MAC功能是转换的…...
在 Windows 11 安卓子系统中安装 APK 的操作指南
这个软件好像不可以在纯android系统中使用(不知道是缺了什么),其他对于android的虚拟机要不缺少必要功能组件,要不性能过于低下。本方法致力于在带有谷歌框架WSA中运行该APK 在 Windows 11 安卓子系统中安装 APK 的操作指南 本指…...
树莓派5跑n8n稳吗?实测Docker部署性能与避坑指南(Ubuntu 24.04 + 安全加固)
树莓派5实战:n8n工作流自动化平台的Docker部署与性能调优指南 在物联网与自动化技术蓬勃发展的今天,如何以最低成本构建稳定可靠的工作流自动化系统成为许多开发者和企业关注的重点。树莓派5凭借其出色的性价比和低功耗特性,配合Docker容器化…...
Polars 2.0清洗架构解密(含完整数据流拓扑图):为什么92%的团队还在用Pandas硬扛TB级脏数据?
第一章:Polars 2.0清洗架构解密:从设计哲学到性能跃迁Polars 2.0 的清洗架构并非简单功能叠加,而是以“零拷贝流式处理”与“惰性执行图优化”为双核驱动的范式重构。其设计哲学根植于两个核心信条:数据不应在内存中被无谓复制&am…...
3分钟快速上手!Balena Etcher终极镜像烧录工具完全指南
3分钟快速上手!Balena Etcher终极镜像烧录工具完全指南 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher Balena Etcher是一款革命性的跨平台镜像烧录工…...
网页录制技术革命:为什么rrweb比传统录屏更强大?
网页录制技术革命:为什么rrweb比传统录屏更强大? 【免费下载链接】rrweb record and replay the web 项目地址: https://gitcode.com/gh_mirrors/rr/rrweb 在当今数字化时代,网页录制技术已经成为用户体验分析、产品演示、错误调试和在…...
计算机网络 之 【自定义协议、序列化与反序列化】(C++使用JSON示例)
目录 1.自定义协议与序列化/反序列化 2.Json简介 Json是什么 第三方库提供,使用时包含头文件 JSON 的数据类型 JSON结构示例 C使用JSON示例 1.自定义协议与序列化/反序列化 协议的必要性 协议是通信双方的约定,它定义了数据的格式和含义ÿ…...
避坑指南:为什么你的Jetson开发板apt安装Perf总是失败?
深度解析:Jetson开发板为何无法直接安装Perf及高效解决方案 在嵌入式开发领域,Nvidia Jetson系列凭借其强大的AI计算能力成为边缘计算的热门选择。然而当开发者尝试在这类设备上使用标准Ubuntu方法安装性能分析工具Perf时,往往会遭遇意想不到…...
如何突破内容访问限制?5类开源工具的技术解析与场景适配
如何突破内容访问限制?5类开源工具的技术解析与场景适配 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,优质内容往往被各种访问限制所阻…...
实战:利用大模型预测 2026 年最热门的‘长尾提问’并提前进行 GEO 占位
各位编程领域的同仁、技术爱好者,大家好!今天,我们齐聚一堂,探讨一个既前沿又极具实战价值的议题:如何利用大模型(Large Language Models, LLMs)的强大能力,预测2026年可能成为热点的…...
Biolaminin 层粘连蛋白(LN521)在干细胞培养中的作用与应用解析【曼博生物官方代理BioLamina】
摘要:人类重组层粘连蛋白(Laminin),尤其是LN521亚型,在多能干细胞培养中具有重要作用。本文从细胞微环境、培养体系及应用场景角度,对其在干细胞研究与转化中的价值进行系统梳理。 关键词:LN521…...
ARMv8、AArch64 与 arm64:命名与体系结构要点
ARMv8、AArch64 与 arm64:命名与体系结构要点 ARMv8 指 ARM 架构的一个主版本代际;AArch64 是该代际下的 64 位执行状态与 A64 指令集;arm64 与 aarch64 是操作系统与工具链中对 AArch64 的常用三元组/目录名,二进制约定一致。下…...
