当前位置: 首页 > news >正文

[C++]使用纯opencv部署yolov11-seg实例分割onnx模型

【算法介绍】

在C++中使用纯OpenCV部署YOLOv11-seg进行实例分割是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTorch模型。然而,可以通过一些间接的方法来实现这一目标,比如将PyTorch模型转换为ONNX格式,然后使用OpenCV的DNN模块加载ONNX模型。

部署过程大致如下:首先,需要确保开发环境已经安装了OpenCV 4.x(带有DNN模块)和必要的C++编译器。然后,将YOLOv11-seg模型从PyTorch转换为ONNX格式,这通常涉及使用PyTorch的torch.onnx.export函数。接下来,使用OpenCV的DNN模块加载ONNX模型,并准备好模型的配置文件和类别名称文件。

在模型推理阶段,需要预处理输入图像(如调整大小、归一化等)以符合模型的输入要求,将预处理后的图像输入到模型中,并获取分割结果。对结果进行后处理,包括解析输出、应用非极大值抑制(NMS)和绘制分割边界等。

需要注意的是,由于YOLOv11-seg是一个复杂的模型,其输出可能包含多个层的信息,因此需要仔细解析模型输出,并根据YOLOv11-seg的具体实现进行后处理。此外,由于OpenCV的DNN模块对ONNX的支持可能有限,某些YOLOv11-seg的特性可能无法在OpenCV中直接实现,这时可能需要寻找替代方案。

总之,使用纯OpenCV部署YOLOv11-seg需要深入理解模型架构、OpenCV的DNN模块以及ONNX格式。

【效果展示】

【实现部分代码】

#include <iostream>
#include<opencv2/opencv.hpp>#include<math.h>
#include "yolov11_seg.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("car.mp4");if (!cap.isOpened()){std::cout << "open capture failured!" << std::endl;return -1;}cv::Mat frame;cv::dnn::Net net;if (task.ReadModel(net, model_path, true)) {std::cout << "read net ok!" << std::endl;}else {std::cout << "read net failured!" << std::endl;return -1;}while (true){cap.read(frame);if (frame.empty()){std::cout << "read to end" << std::endl;break;}result.clear();if (task.Detect(frame, net, result)) {DrawPred(frame, result, task._className, color,true);}int k = waitKey(10);if (k == 27) { //esc break;}}cap.release();system("pause");return 0;
}int main() {string detect_model_path = "./yolo11n-seg.onnx";Yolov11Seg detector;video_demo(detector, detect_model_path);
}

【视频演示】

C++使用纯opencv部署yolov11-seg实例分割onnx模型_哔哩哔哩_bilibili【测试环境】vs2019cmake==3.24.3opencv==4.8.0更多信息和源码下载参考博文:https://blog.csdn.net/FL1623863129/article/details/142716713, 视频播放量 1、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:使用易语言调用opencv进行视频和摄像头每一帧处理,C# winform部署yolov10的onnx模型,图像分割领域如何水一篇论文,怎样学能快速出结果?UNet/Deeplab/Mask2former/SAM图像分割算法全详解!,C#使用onnxruntime部署Detic检测2万1千种类别的物体,强烈推荐!国防科技大学OpenCV图像处理全套教程!终于有人将opencv讲透了!存下吧,比啃书好多了!机器视觉/人脸检测/计算机视觉/人工智能,易语言部署yolov8的onnx模型,yolov8最新版onnx部署Android安卓ncnn,C# winform使用纯opencvsharp部署yolox-onnx模型,使用python部署yolov10的onnx模型,C# winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1oE1dYTEGh/
【源码下载】

https://download.csdn.net/download/FL1623863129/89848150


【测试环境】

vs2019
cmake==3.24.3
opencv==4.8.0

【运行步骤】

下载模型:https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-seg.pt

转换模型:yolo export model=yolo11n-seg.pt format=onnx dynamic=False opset=12 

编译项目源码,将模型,视频路径对应到源码即可运行

http://www.lryc.cn/news/455738.html

相关文章:

  • PAT甲级-1122 Hamiltonian Cycle
  • Java 插入排序
  • 随机掉落的项目足迹:Vue3中vite.config.ts配置代理服务器解决跨域问题
  • C++笔记之标准库和boost库中bind占位符_1的写法差异
  • 二分查找
  • 关注、取关、Redis实现共同关注、 博客推送与分页查询
  • 专业高清录屏软件!Mirillis Action v4.40 解锁版下载,小白看了都会的安装方法
  • 胤娲科技:AI重塑会议——灵动未来,会议新纪元
  • Python画笔案例-080 绘制 颜色亮度测试
  • MATLAB工具库:数据统计分析工具MvCAT、MhAST等
  • 角色动画——RootMotion全解
  • 加密软件的桌面管理系统有什么?
  • 【stm32】寄存器(stm32技术手册下载链接)
  • django的路由分发
  • 《贪吃蛇小游戏 1.0》源码
  • 初入网络学习第一篇
  • (项目管理系列课程)项目规划阶段:项目范围管理-收集需求
  • SQl注入文件上传及sqli-labs第七关less-7
  • 想成为月薪过万的软件测试工程师?快看过来!
  • 找生网站方案———未来之窗行业应用跨平台架构
  • 全网都在找的Python生成器竟然在这里!简单几步,让你的代码更简洁、更高效!
  • 插入排序,希尔排序,和归并排序
  • Prompt 模版解析:诗人角色的创意引导与实践
  • zookeeper选举kafka集群的controller
  • 吉如一线段树:区间最值和历史最值
  • 数据库常见的安全特性有哪些
  • Debezium日常分享系列之:Debezium 3.0.0.Final发布
  • MVCC(多版本并发控制)
  • 低代码可视化-uniapp响应式数据data-代码生成器
  • 10.7学习