QT开发技术 [opencv加载onnx模型,dnn推理]

server/2025/2/23 0:04:55/

一、导出onnx 模型

yolo export model=xx\xx\best.pt format=onnx

qtonnx_3">二、qt加载onnx模型,推理显示

 std::string fileName = QCoreApplication::applicationDirPath().toStdString() + "/Model/best.onnx";cv::dnn::Net net = cv::dnn::readNetFromONNX(fileName);if (net.empty()) {std::cerr << "Failed to load ONNX model. Check: " << std::endl<< "1. File path: " << fileName << std::endl<< "2. OpenCV version (require >= 4.5)" << std::endl<< "3. ONNX opset compatibility" << std::endl;return;}cv::Mat image = cv::imread(QCoreApplication::applicationDirPath().toStdString() + "/Data/test3.jpg");if (image.empty()) {std::cerr << "Failed to load image" << std::endl;return;}// 预处理增强cv::Mat blob;try {bool swapRB = true;  // OpenCV默认BGR,YOLO需要RGBbool crop = false;cv::Scalar mean = cv::Scalar(0, 0, 0);double scale = 1.0 / 255.0;blob = cv::dnn::blobFromImage(image,scale,cv::Size(640, 640),mean,swapRB,crop,CV_32F);}catch (...) {std::cerr << "Blob creation failed" << std::endl;return;}// 设置计算后端(根据环境配置)net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);std::vector<std::string> outLayerNames = net.getUnconnectedOutLayersNames();std::vector<cv::Mat> predictions;try {net.setInput(blob);net.forward(predictions, outLayerNames);}catch (const cv::Exception& e) {std::cerr << "Forward pass failed: " << e.what() << std::endl;return;}// 后处理std::vector<int> classIds;std::vector<float> confidences;std::vector<cv::Rect> boxes;float x_factor = image.cols / 640.0;float y_factor = image.rows / 640.0;// YOLO 专用预处理参数float confThreshold = 0.25;float nmsThreshold = 0.45;for (const auto& pred : predictions) {for (int i = 0; i < pred.rows; ++i) {cv::Mat scores = pred.row(i).colRange(5, pred.cols);cv::Point classIdPoint;double confidence;cv::minMaxLoc(scores, 0, &confidence, 0, &classIdPoint);if (confidence > confThreshold) {int centerX = static_cast<int>(pred.at<float>(i, 0) * x_factor);int centerY = static_cast<int>(pred.at<float>(i, 1) * y_factor);int width = static_cast<int>(pred.at<float>(i, 2) * x_factor);int height = static_cast<int>(pred.at<float>(i, 3) * y_factor);int left = centerX - width / 2;int top = centerY - height / 2;classIds.push_back(classIdPoint.x);confidences.push_back(static_cast<float>(confidence));boxes.push_back(cv::Rect(left, top, width, height));}}}// 非极大值抑制std::vector<int> indices;cv::dnn::NMSBoxes(boxes, confidences, confThreshold, nmsThreshold, indices);// 在图像上绘制边界框和标签for (int idx : indices) {cv::Rect box = boxes[idx];cv::rectangle(image, box, cv::Scalar(0, 255, 0), 2);std::string label = cv::format("%.2f", confidences[idx]);cv::putText(image, label, cv::Point(box.x, box.y - 10), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 255, 0), 2);}// 在 ui->label_Map 上显示图像cv::cvtColor(image, image, cv::COLOR_BGR2RGB);QPixmap pixmap = QPixmap::fromImage(QImage(image.data, image.cols, image.rows, image.step, QImage::Format_RGB888));ui->label_Map->setPixmap(pixmap);

http://www.ppmy.cn/server/169976.html

相关文章

MYSQL的第一次

目录 前情提要 题目解析 连接并使用数据库 创建employees表 创建orders表? 创建invoices表?? ?查看建立的表 前情提要 需要下载mysql并进行配置&#xff0c;建议下载8.0.37&#xff0c;详情可见MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客 题目解析…

RabbitMQ介绍以及基本使用

文章目录 一、什么是消息队列&#xff1f; 二、消息队列的作用&#xff08;优点&#xff09; 1、解耦 2、流量削峰 3、异步 4、顺序性 三、RabbitMQ基本结构 四、RabbitMQ队列模式 1、简单队列模式 2、工作队列模式 3、发布/订阅模式 4、路由模式 5、主题模式 6、…

OpenMetadata MySQL数据质量治理实现分析

架构概览 #mermaid-svg-avONKLWf2EfDAaLY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-avONKLWf2EfDAaLY .error-icon{fill:#552222;}#mermaid-svg-avONKLWf2EfDAaLY .error-text{fill:#552222;stroke:#552222;}#…

【深度学习】Python多线程/多进程在神经网络模型的应用实战

一、Pyhon多线程和多进程的理解和对比分析 1. 基本概念 1.1 多线程 定义&#xff1a;多线程是指一个程序同时运行多个线程&#xff0c;每个线程共享同一进程的内存空间。 特点&#xff1a; 线程之间可以共享全局变量、文件句柄等资源。线程切换开销较小&#xff0c;适合 I/…

矩阵-旋转图像

旋转图像 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。输入&#xff1a;二维数组 输出&#xff1a;void 思路&#xff1a;tempM…

五档历史Level2行情数据:期货市场的信息宝库

五档历史Level2行情数据&#xff1a;期货市场的信息宝库 为了促进学习和研究&#xff0c;我们在此分享一部分匿名处理的Level2高频Tick数据。 历史期货高频tick五档level2链接: https://pan.baidu.com/s/132FzyihmcRtKVgQohtLUBw?pwdsigv 提取码: sigv请注意&#xff0c;分享…

基于 SpringBoot 和 Vue.js 的高校创新创业课程体系系统设计与实现(源码+文档)

项目简介 基于 SpringBoot 和 Vue.js 的“高校创新创业课程体系”系统设计与实现的主要使用者分为管理员、教师和学生&#xff0c;没有授权的用户无法使用本系统功能&#xff0c;包括学生管理、教师管理、课程资源管理、课程信息管理、选择课程管理、成果信息管理等。 &#…

在vue2项目中,实现下载文件功能

一、需求 在页面有下载按钮&#xff0c;点击该按钮&#xff0c;即可下载从接口获取的文件数据 二、思路 在点击按钮后&#xff0c;调取接口获取所需数据&#xff0c;给页面新增a标签&#xff0c;利用其download属性实现下载功能 三、具体代码 let a document.createElemen…