[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型
【算法介绍】
使用纯OpenCV部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTorch模型。然而,可以通过一些间接的方法来实现这一目标,即将PyTorch模型转换为ONNX格式,然后使用OpenCV的DNN模块加载ONNX模型。
YOLOv11-Pose结合了YOLO(You Only Look Once)的高效物体检测算法和Pose Estimation(姿态估计)专注于识别人体关键点的能力,能在多种计算平台上实时处理人体姿态数据。其采用的核心原理是特殊神经网络结构YOLOv3-tiny,能快速计算出图像中所有人体关键点的位置,实现姿态估计。同时,该模型还采用了ONNX格式,这是一种开放的模型表示,使得模型能在不同的深度学习框架和工具之间轻松转换。
在使用OpenCV部署YOLOv11-Pose ONNX模型时,需要确保开发环境已经安装了OpenCV 4.x(带有DNN模块)和必要的C++编译器。具体步骤包括加载ONNX模型、预处理输入图像、将预处理后的图像输入到模型中获取检测结果、对检测结果进行后处理等。由于YOLOv11是一个复杂的模型,其输出可能包含多个层的信息,因此需要仔细解析模型输出,并根据YOLOv11的具体实现进行后处理。
总的来说,使用纯OpenCV部署YOLOv11-Pose ONNX模型需要深入理解相关领域的知识,包括YOLOv11的模型架构、OpenCV的DNN模块以及ONNX格式等。
【效果展示】
【实现代码】
#include <iostream>
#include<opencv2/opencv.hpp>#include<math.h>
#include "yolov11_pose.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& task, cv::Mat& img, std::string& model_path)
{cv::dnn::Net net;if (task.ReadModel(net, model_path, false)) {std::cout << "read net ok!" << std::endl;}else {return -1;}//生成随机颜色std::vector<cv::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(cv::Scalar(b, g, r));}std::vector<OutputParams> result;bool isPose = false;if (typeid(task) == typeid(Yolov8Pose)) {isPose = true;}PoseParams poseParams;if (task.Detect(img, net, result)) {if (isPose)DrawPredPose(img, result, poseParams);elseDrawPred(img, result, task._className, color);}else {std::cout << "Detect Failed!" << std::endl;}system("pause");return 0;
}template<typename _Tp>
int video_demo(_Tp& task, std::string& model_path)
{std::vector<cv::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(cv::Scalar(b, g, r));}std::vector<OutputParams> result;cv::VideoCapture cap("video.avi");if (!cap.isOpened()){std::cout << "open capture failured!" << std::endl;return -1;}cv::Mat frame;bool isPose = false;PoseParams poseParams;
#ifdef VIDEO_OPENCVcv::dnn::Net net;if (typeid(task) == typeid(Yolov11Pose)) {isPose = true;}if (task.ReadModel(net, model_path, true)) {std::cout << "read net ok!" << std::endl;}else {std::cout << "read net failured!" << std::endl;return -1;}#elseif (typeid(task) == typeid(Yolov8PoseOnnx)) {isPose = true;}if (task.ReadModel(model_path, true)) {std::cout << "read net ok!" << std::endl;}else {std::cout << "read net failured!" << std::endl;return -1;}#endifwhile (true){cap.read(frame);if (frame.empty()){std::cout << "read to end" << std::endl;break;}result.clear();
#ifdef VIDEO_OPENCVif (task.Detect(frame, net, result)) {if (isPose)DrawPredPose(frame, result, poseParams,true);elseDrawPred(frame, result, task._className, color,true);}
#elseif (task.OnnxDetect(frame, result)) {if (isPose)DrawPredPose(frame, result, poseParams, true);elseDrawPred(frame, result, task._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-pose.onnx";Yolov11Pose detector;video_demo(detector, detect_model_path);
}
【视频演示】
C++使用纯opencv部署yolov11-pose姿态估计onnx模型_哔哩哔哩_bilibili【测试环境】vs2019 cmake==3.24.3 opencv==4.8.0【运行步骤】下载模型:https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-pose.pt转换模型:yolo export model=yolo11n-pose.pt format=onnx dynamic=False opset=, 视频播放量 0、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:用C#部署yolov8的tensorrt模型进行目标检测winform最快检测速度,使用易语言调用opencv进行视频和摄像头每一帧处理,C#使用纯OpenCvSharp部署yolov8-pose姿态识别,C# winform部署yolov11目标检测的onnx模型,基于opencv封装易语言读写视频操作模块支持视频读取和写出,使用C++部署yolov8的onnx和bytetrack实现目标追踪,C++使用yolov11的onnx模型结合opencv和bytetrack实现目标追踪,yolov5-7.0部署在ros机器人操作系统视频演示,使用C#部署openvino-yolov5s模型,使用C#调用libotrch-yolov5模型实现全网最快winform目标检测https://www.bilibili.com/video/BV1491XY2EWk/
【源码下载】
https://download.csdn.net/download/FL1623863129/89847502
【测试环境】
vs2019
cmake==3.24.3
opencv==4.8.0
【运行步骤】
下载模型:https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-pose.pt
转换模型:yolo export model=yolo11n-pose.pt format=onnx dynamic=False opset=12
编译项目源码,将模型,视频路径对应到源码即可运行
相关文章:

[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型
【算法介绍】 使用纯OpenCV部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTorch模型。然而,可以通过一些间接的方法来实现这一目标&#x…...
python you-get下载视频
You-Get是一个使用Python开发的命令行工具,用于下载网络上的音视频资源。你可以通过pip安装You-Get,具体操作如下: 打开命令行工具,输入pip install you-get,然后回车执行命令 You-Get还允许你指定下载的视频格式和质…...

SCUC博客摘录「 储能参与电能市场联合出清:SCUC和SCED模型应用于辅助服务调频市场(IEEE39节点系统)」2024年10月6日
2.1 SCUC模型在本方法中,首先利用SCUC模型确定机组出力计划和储能充放电计划。SCUC模型是电力系统经济调度的重要工具,通过优化发电机组出力计划和调度,实现电力系统的经济性和可靠性。在考虑储能的情况下,SCUC模型需要考虑储能的…...

Git分支-团队协作以及GitHub操作
Git分支操作 在版本控制过程中,同时推进多个任务> 程序员开发与开发主线并行,互不影响 分支底层也是指针的引用 hot-fix:相当于若在进行分支合并后程序出现了bug和卡顿等现象,通过热补丁来进行程序的更新,确保程序正常运行 常…...

力扣刷题 | 两数之和
目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 给定一个整数数组 nums 和…...

[C#]winform部署官方yolov11-obb旋转框检测的onnx模型
【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov11-obb(You Only Look Once version 8 with Oriented Bounding Boxes)是一种先进的对象检测算法,它在传统的Yolov3和Yolov4基础上进行了优化,加…...

【GC日志和OOM日志分析】JVM GC日志和OOM Dump文件分析
1 缘起 充电、充电、充电。 增加一些必备的知识,帮助后续使用。 2 配置JVM参数 为分析GC日志以及OOM相关信息,配置JVM参数,分为三个部分: (1)堆内存,包括年轻代、最大堆内存; &a…...

【电路】1.1 实际电路和电路模型
1.1 实际电路和电路模型 科学理论的研究对象是现实世界背后的抽象世界,如: 数学中的 ∞ \infty ∞,经典力学中“质点”的概念,牛顿运动定律(如惯性定律,如果一个物体不受外力情况下,一直保持匀…...

Vue - 打包部署
vscode找到NPM脚本,点击build。 目录下出现dist目录则表示安装成功。 安装Nginxnginx: download 目录用途conf配置文件目录html静态资源文件目录logs日志文件目录temp临时文件目录 将刚刚打包好的文件放到html目录下。 点击nginx.exe,用localhost:默认…...

spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)
文章目录 【README】【1】文件上传与MultipartResolver【1.1】使用MultipartResolver进行文件上传【1.2】springmvc处理multipart多部件请求流程【1.3】使用springmvc上传文件代码实现(springmvc6.10版本): 【2】Handler与HandlerAdaptor&…...
springboot项目中属性的使用优先级;maven编译插件切换环境变量
概述 在项目部署时,相关的生产环境和测试环境是分开的,但是代码是同一套; 所以一般会有多套变量; 项目中默认变量(一般是测试环境) 线上变量(线上数据较敏感,一般也不会放在代码中&…...

【Qt】控件概述 (1)—— Widget属性
控件概述 1. QWidget核心属性1.1核心属性概述1.2 enable1.3 geometry——窗口坐标1.4 window frame的影响1.4 windowTitle——窗口标题1.5 windowIcon——窗口图标1.6 windowOpacity——透明度设置1.7 cursor——光标设置1.8 font——字体设置1.9 toolTip——鼠标悬停提示设置1…...

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践
学员闯关手册:https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频:https://www.bilibili.com/video/BV1cU411S7iV/ 课程文档: https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/Prompt 关…...
OpenCV视频I/O(11)视频采集类VideoCapture之设置视频捕获设备的属性函数 set()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 VideoCapture 中设置一个属性。 在OpenCV中,cv::VideoCapture::set() 函数用于设置视频捕获设备的属性。这些属性可以包括分辨率、…...

数据结构之树(3)
一、森林和树的转换 重要! 树->二叉树 由于孩子兄弟链式存储和二叉树链式存储本质相同,故树可转换为二叉树。 森林->二叉树 森林:m棵互不相交的树的集合 森林->树 树->二叉树 森林中各个树的根节点之间视为兄弟关系 二、树…...

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下docker学习02(yum源切换及docker安装配置)
2 前期工作 2.1 切换yum源并更新 删除/etc/yum.repos.d/原有repo文件,将Centos-7.repo库文件拷贝到该目录下。 然后清楚原有缓存yum clean all 生成新的缓存yum makecache 更新yum update –y 然后再确认/etc/yum.repos.d/不会有其他库文件,只留下…...

强化学习笔记之【Q-learning算法和DQN算法】
强化学习笔记(一)——Q-learning和DQN算法核心公式 文章目录 强化学习笔记(一)——Q-learning和DQN算法核心公式前言:Q-learning算法DQN算法 前言: 强化学习领域,繁冗复杂的大段代码里面&#…...
面试经验02
嵌入式简历制作指南与秋招求职建议 引言 秋招季即将到来,许多同学开始准备求职简历。无论你是考研失利准备就业,还是即将毕业寻找实习,一份优秀的简历都是求职的敲门砖。今天,我们将讨论如何制作嵌入式领域的求职简历࿰…...
分层图 的尝试学习 1.0
分层图: 分层图的最短路: 又叫做 扩点最短路。不把实际位置看做是图上的点,而是把实际位置及其状态的组合,(一个点有若干的状态,所以一个点会扩充出来若干点)看做是图上的点,然后搜索…...
第 31 章 javascript 之 XPath
第 31 章 XPath 1.IE 中的 XPath 2.W3C 中的 XPath 3.XPath 跨浏览器兼容 XPath 是一种节点查找手段,对比之前使用标准 DOM 去查找 XML 中的节点方式,大大降低了查找难度,方便开发者使用。但是,DOM3 级以前的标准并没有就 XPa…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...