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

news2024/11/26 6:03:18

【算法介绍】

在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);
		else
		DrawPred(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.coloradmin.cn/o/2190355.html

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

相关文章

使用statsmodels解锁Python中的统计分析力量

使用 Python 中的 statsmodels 解锁统计分析的力量 引言 在不断发展的数据科学世界中&#xff0c;statsmodels 作为一个专为统计分析和计量经济学应用设计的 Python 库而脱颖而出。与更广泛的机器学习库不同&#xff0c;statsmodels 提供了专门设计的工具&#xff0c;用于深入…

Origin正态分布检验

在spass中用Shapiro-Wilk检验--正态分布检测 Shapiro-Wilk检验--正态分布检测_spss shapiro-wilk检验-CSDN博客

【路径规划】多机器人路径规划

摘要 多机器人路径规划在现代自动化、仓储管理及智能交通系统中有着广泛的应用。本文提出了一种基于A*算法的多机器人路径规划方法&#xff0c;旨在解决多机器人在同一环境中的路径冲突问题。通过采用启发式搜索和路径优化策略&#xff0c;机器人能够在保持避障的前提下实现最…

《Linux从小白到高手》理论篇:Linux的资源监控管理

本篇介绍Linux的资源监控管理。 1、CPU 资源管理 进程调度&#xff1a; Linux 采用公平的进程调度算法&#xff0c;确保每个进程都能获得合理的 CPU 时间。调度算法会根据进程的优先级、等待时间等因素来决定哪个进程获得 CPU 使用权。 可以通过调整进程的优先级来影响其获得…

wpf实现新用户页面引导

第一步 第二部 部分代码: private void show(int xh, FrameworkElement fe, string con, Visibility vis Visibility.Visible) {Point point fe.TransformToAncestor(Window.GetWindow(fe)).Transform(new Point(0, 0));//获取控件坐标点RectangleGeometry rg new Rectangl…

【Linux】进程详解:命令行参数、环境变量及地址空间

✨ 一生如牛不得闲&#xff0c;得闲已与山共眠 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &…

如何注册西柚云服务器账号?渠道优惠下单获得立减200优惠

1.什么是生信云服务器&#xff1f; 生信云服务器是一种专门为生物信息学领域打造的一体化服务解决方案&#xff0c;旨在满足生信科研群体的多样化需求。无论你是生物信息学的初学者&#xff0c;还是已经具备丰富经验的生信专家&#xff0c;这个平台都能够提供帮助。 满足不同…

【算法笔记】滑动窗口算法原理深度剖析

【算法笔记】滑动窗口算法原理深度剖析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;算法笔记 文章目录 【算法笔记】滑动窗口算法原理深度剖析前言一.长度最小的子数组1.1题目1.2思路分析1.3算法流程1.4正确性证明1.5代码实现 二.无重复…

C题(六) 1到 100 的所有整数中出现多少个数字9

场景&#xff1a;编写程序数一下 1到 100 的所有整数中出现多少个数字9 控制循环的变量不可以随意改动&#xff01;&#xff01;&#xff01; 控制循环的变量不可以随意改动&#xff01;&#xff01;&#xff01; 控制循环的变量不可以随意改动&#xff01;&#xff01;&#x…

【PyCharm】Ubuntu20.04 卸载 PyCharm 并安装激活 Professional

【PyCharm】Ubuntu20.04 卸载 PyCharm 并安装激活 Professional 1 卸载2 安装激活 1 卸载 参考文档: Link 删除安装目录 删掉之前压缩包解压出来的目录&#xff0c;例如&#xff1a;我之前是放在家目录下 rm -rf ~/pycharm-community-2023.2.1删除配置文件 rm -rf ~/.config…

JAVA运用中springBoot获取前端ajax提交参数方式汇总

本篇文章主要讲解springboot获取前端提交的参数信息&#xff0c;后端进行接受的常见方法汇总&#xff0c;通过本篇文章你可以快速掌握对表单和连接参数获取的能力。 作者&#xff1a;任聪聪 日期&#xff1a;2024年10月5日 一、delete、get等url参数获取方式 前台提交&#xf…

linux下yum安装时出现Loaded plugins: fastestmirror的解决办法

一、centos7修改源 在CentOS 7中&#xff0c;修改系统软件源可以通过编辑/etc/yum.repos.d/目录下的.repo文件来实现。以下是一个基本的步骤和示例代码&#xff0c;用于将默认的软件源修改为阿里云的源。 备份当前的CentOS-Base.repo文件&#xff1a; sudo cp /etc/yum.repos.…

使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

【可视化大屏】echarts介绍

使用echarts的步骤&#xff1a; 1.下载并引用echarts.js文件 2.准备一个具体宽高的容器 3.初始化echarts实例对象 // 实例化对象var myChart echarts.init(document.querySelector(".bar .chart"));4.指定配置项和数据 // 指定配置和数据var option {color: [&qu…

系统架构设计师⑥:知识产权与标准化

系统架构设计师⑥&#xff1a;知识产权与标准化 知识产权保护的范围与对象 知识产权保护期限 知识产权人确定 侵权判定 中国公民、法人或者其他组织的作品&#xff0c;不论是否发表&#xff0c;都享有著作权。 开发软件所用的思想、处理过程、操作方法或者数学概念不受保护。 …

信号检测理论(Signal Detection Theory, SDT)

信号检测理论&#xff08;Signal Detection Theory, SDT&#xff09;模拟是一种实验设计&#xff0c;用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域&#xff0c;信号检测理论都非常重要。 一、基础概念&#xff1a; 在信…

Mac ToDesk 无法连接网络

描述 网络连接的是 Wi-Fi&#xff0c;打开浏览器能跟正常浏览内容&#xff0c;说明 Wi-Fi 是正常的。 现象&#xff1a;显示网络连接失败&#xff0c;一直无法登陆&#xff01; 检查防火墙是没有阻止ToDesk 的任何连接&#xff0c;说明防火墙也是正常的。 解决 检查登录项&a…

3dsMax添加天空盒

点击渲染&#xff0c;环境 &#xff0c; 点击位图 找到要设置的天空HDR&#xff0c;可以使用HDR(EXR)贴图 一个可以下载HDR贴图的网站 https://polyhaven.com/hdris在渲染的时候不要使用使用微软输入法&#xff0c;3dsmax会卡死&#xff0c; 在渲染的时候不要使用使用微软…

胤娲科技:AI重塑会议——灵动未来,会议新纪元

你是否曾经历过这样的会议场景&#xff1a;会议纪要不准确&#xff0c;人名张冠李戴&#xff1b;错过会议&#xff0c;却无从回顾关键内容&#xff1b;会议效率低下&#xff0c;时间白白流逝&#xff1f; 这些问题仿佛成了现代会议的“顽疾”。然而&#xff0c;随着AI技术的飞速…

苹果荔枝柠檬梨柿子数据集 水果数据集 树上1500张 带标注 voc yolo 5类

苹果荔枝柠檬梨柿子数据集 水果数据集 树上1500张 带标注 voc yolo 5类 苹果荔枝柠檬梨柿子数据集 名称 苹果荔枝柠檬梨柿子数据集 (Apple, Litchi, Lemon, Pear, Persimmon Dataset) 规模 图像数量&#xff1a;1498张图像。类别&#xff1a;5种水果类别。标注个数&#xff…