VS+Qt+C++ Yolov8物体识别窗体程序onnx模型

程序示例精选
VS+Qt+C++ Yolov8物体识别窗体程序onnx模型
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《VS+Qt+C++ Yolov8物体识别窗体程序onnx模型》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


运行结果

在这里插入图片描述


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. VS2019, Qt
       2. C++,Yolov8

二、使用步骤

代码如下(示例):

#include<math.h>
#include "yolov8_onnx.h"
#include<time.h>
using namespace dnn;template<typename _Tp>int yolov8_onnx(_Tp& cls, Mat& img, string& model_path)
{//cout << "test00" << endl;if (cls.ReadModel(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));color.push_back(Scalar(255, 0, 255));}if (cls.OnnxDetect(img, result)) {//cout << "test5" << endl;DrawPred(img,cls._className, color);}else {cout << "Detect Failed!" << endl;}//system("pause");//return 0;
}mainWindow::mainWindow(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);QObject::connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(onCamera()));QObject::connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(onVideo()));static void sleep(int msec)
{QTime dieTime = QTime::currentTime().addMSecs(msec);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
void mainWindow::onCamera()
{std::cout << "test_ " << std::endl;cout << "aa" << endl;VideoCapture capture(0);while (1) {Mat frame;capture >> frame;if (frame.empty()) break;ui.label->clear();cvtColor(frame, frame, COLOR_RGB2BGR);QImage img = QImage((const unsigned char*)(frame.data), ui.label->setPixmap(QPixmap::fromImage(img));ui.label->update();}
}
void mainWindow::onVideo()
{std::cout << "test_ " << std::endl;cout << "aa" << endl;QString filePath = QFileDialog::getOpenFileName(this, tr("Open"));if (filePath.isEmpty()) {qDebug() << "Select nothing";return;}QTextCodec* codec = QTextCodec::codecForName("UTF-8");std::string imagePath = codec->fromUnicode(filePath).data();std::cout << imagePath << std::endl;VideoCapture capture(imagePath);capture.open(imagePath);if (!capture.isOpened()){cout << "could not load video..." << endl;}while (1) {Mat frame;capture >> frame;if (frame.empty()) break;ui.label->clear();cvtColor(frame, frame, COLOR_RGB2BGR);QImage img = QImage((const unsigned char*)(frame.data), ui.label->setPixmap(QPixmap::fromImage(img));ui.label->update();sleep(30); }
}
void mainWindow::onRecogn()
{//string img_path = "./data/image/aa.png";//string detect_model_path = "yolov8n.onnx";//Mat img = imread(img_path);//Yolov8Onnx task_detect_onnx;//yolov8_onnx(task_detect_onnx, img, detect_model_path);  //onnxruntime detect//return 0;Mat img;img = capture.open("aa.mp4");QStringList nameList;QStringList countList;while (capture.read(img))//cout << "test" << endl;Yolov8Onnx task_detect_onnx;yolov8_onnx(task_detect_onnx, img, detect_model_path);  //onnxruntime detect//imshow("output", img);//waitKey(10);extern Mat imgT;//cout << "imgT" << imgT << endl;ui.label->clear();cvtColor(imgT, imgT, COLOR_RGB2BGR);QImage img = QImage((const unsigned char*)(imgT.data), imgT.cols, imgT.rows, imgT.cols * imgT.channels(), QImage::Format_RGB888);img = img.scaled(600, 500, Qt::KeepAspectRatio); ui.label->setPixmap(QPixmap::fromImage(img));ui.label->update();QSqlDatabase db;db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("information.db");if (!db.open()) {qDebug() << "";//qDebug() << "open error" << db.lastError();}QSqlQuery query;QString sqlSelect = "SELECT name, count FROM informationTable";if (query.exec(sqlSelect)) {while (query.next()) {QString name = query.value(0).toString();QString count = query.value(1).toString();nameList.append(name);countList.append(count);}}else {qDebug() << "Query failed";}// 一次性显示到 UIfor (int i = 0; i < nameList.size(); i++) {ui.textEdit->append(nameList[i] + ": " + countList[i]);}db.close();sleep(30);  //nameList.clear();//countList.clear();capture.release();
}
void mainWindow::testT() {QString nameEd = QString::fromStdString("person");//将信息写入数据库QSqlDatabase db;db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("information.db");// 2. 打开数据库if (!db.open()) {qDebug() << "";//qDebug() << "open error" << db.lastError();}QSqlQuery query;//QString sqlInert = QString("insert into informationTable(name,count)" "values('%1', '%2')").arg(nameEd).arg(countEd);//if (!query.exec(sqlInert))//	qDebug() << "insert data error" << db.lastError();// 检查数据库中是否存在nameEdQString checkExistQuery = QString("SELECT COUNT(*) FROM informationTable WHERE name = '%1'").arg(nameEd);QSqlQuery existQuery(checkExistQuery);if (existQuery.exec() && existQuery.next()) {int count = existQuery.value(0).toInt();if (count > 0) {qDebug() << "count" << count;// 如果存在,则执行更新操作}else {qDebug() << "no exists";// 如果不存在,则执行插入操作}}else {qDebug() << "Check existence query failed";}
}
运行结果

在这里插入图片描述

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页:https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别:https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/152072.shtml

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

相关文章

C++ 与Qt之间的关系

C 和 Qt 之间有着密切的关系。Qt 是一个用于开发 GUI 和应用程序的跨平台 C 库&#xff0c;它提供了许多功能和工具&#xff0c;可以帮助开发者创建高质量的桌面应用程序和移动应用程序。 以下是 C 和 Qt 之间的一些主要关系&#xff1a; Qt 是用 C 编写的&#xff1a;Qt 的核…

Linux远程工具专家推荐(二)

8. Apache Guacamole Apache Guacamole 是一款免费开源的无客户端远程桌面网关&#xff0c;支持 VNC、RDP 和 SSH 等标准协议。无需插件或客户端软件&#xff1b;只需使用 HTML5 Web 应用程序&#xff08;例如 Web 浏览器&#xff09;即可。 这意味着您的计算机的使用不受任何一…

【开源】基于Vue和SpringBoot的民宿预定管理系统

项目编号&#xff1a; S 058 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S058&#xff0c;文末获取源码。} 项目编号&#xff1a;S058&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色…

【监控系统】日志可视化监控体系ELK搭建

1.ELK架构是什么 ELK是ElasticsearchLogstashKibana的简称。 Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;可以用于全文检索、结构化检索和分析&#xff0c;它构建在Lucene搜索引擎库之上&#xff0c;是当前使用较为广泛的开源搜索引擎之一。 Logstash是一个…

CISP模拟试题(二)

免责声明 文章仅做经验分享用途,利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 1.中国信息安全测评中心对CISP注册信息安全专业人员有保持认证要求,在证书有效期内,应完成至少6…

雪花算法的使用

雪花算法的使用(工具类utils) import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;// 雪花算法 Component public class SnowflakeUtils { // Generated ID: 1724603634882318341; // Generated ID: 1724603…

Databend 开源周报第 120 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 使用自定义 CON…

常见Web安全

一.Web安全概述 以下是百度百科对于web安全的解释&#xff1a; Web安全&#xff0c;计算机术语&#xff0c;随着Web2.0、社交网络、微博等等一系列新型的互联网产品的诞生&#xff0c;基于Web环境的互联网应用越来越广泛&#xff0c;企业信息化的过程中各种应用都架设在Web平台…

java mybatisplus generator 修改字段类型

最新版生成代码的指定字段类型 FastAutoGenerator .dataSourceConfig(config -> {config.typeConvertHandler(new ITypeConvertHandler() {Overridepublic NotNull IColumnType convert(GlobalConfig globalConfig, TypeRegistry typeRegistry, TableField.MetaInfo metaIn…

【框架整合】Redis限流方案

1、Redis实现限流方案的核心原理&#xff1a; redis实现限流的核心原理在于redis 的key 过期时间&#xff0c;当我们设置一个key到redis中时&#xff0c;会将key设置上过期时间&#xff0c;这里的实现是采用lua脚本来实现原子性的。2、准备 引入相关依赖 <dependency>…

MySQL 之多版本并发控制 MVCC

MySQL 之多版本并发控制 MVCC 1、MVCC 中的两种读取方式1.1、快照读1.2、当前读 2、MVCC实现原理之 ReadView2.1、隐藏字段2.2、ReadView2.3、读已提交和可重复读隔离级别下&#xff0c;产生 ReadView 时机的区别 3、MVCC 解决幻读4、总结 MVCC&#xff08;多版本并发控制&…

springboot引入第三方jar包放到项目目录中,添加web.xml

参考博客&#xff1a;https://www.cnblogs.com/mask-xiexie/p/16086612.html https://zhuanlan.zhihu.com/p/587605618 1、在resources目录下新建lib文件夹&#xff0c;将jar包放到lib文件夹中 2、修改pom.xml文件 <dependency><groupId>com.lanren312</grou…

android 点击EdiText 禁止弹出系统键盘

找了很多都不好用&#xff0c;最后使用 editText.setShowSoftInputOnFocus(false); editText.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {Overridepublic void onGlobalLayout() {InputMethodManager imm (InputMetho…

YOLOv8-Seg改进:Backbone改进 |Next-ViT堆栈NCB和NTB 构建先进的CNN-Transformer混合架构

🚀🚀🚀本文改进:Next-ViT堆栈NCB和NTB 构建先进的CNN-Transformer混合架构,包括nextvit_small, nextvit_base, nextvit_large,相比较yolov8-seg各个版本如下: layersparametersgradientsGFLOPsnextvit_small61033841075

网络运维与网络安全 学习笔记2023.11.18

网络运维与网络安全 学习笔记 第十九天 今日目标 冲突域和交换机工作原理、广播域和VLAN原理 VLAN配置、TRUNK原理与配置、HYBRID原理与配置 冲突域和交换机工作原理 冲突域概述 定义 网络设备发送的数据&#xff0c;产生冲突的区域&#xff08;范围&#xff09; 对象 “数…

使用Generator处理二叉树的中序遍历

二叉树的中序遍历 let arr [[[a], b, [c]], d, [[e], f, [g]]] class Tree {constructor(left,root,right) { // 一棵树具有根节点&#xff0c;左孩子节点和右孩子节点this.left left;this.root root;this.right right;} } // 将数组构造为树的处理函数 function arrToTre…

【Java 进阶篇】Ajax 实现——JQuery 实现方式 `ajax()`

嗨&#xff0c;亲爱的读者们&#xff01;欢迎来到这篇关于使用 jQuery 中的 ajax() 方法进行 Ajax 请求的博客。在前端开发中&#xff0c;jQuery 提供了简便而强大的工具&#xff0c;其中 ajax() 方法为我们处理异步请求提供了便捷的解决方案。无需手动创建 XMLHttpRequest 对象…

利用AlphaMissense准确预测蛋白质组范围内的错义变体效应

Editor’s summary 蛋白质中单个氨基酸的变化有时影响不大&#xff0c;但通常会导致蛋白质折叠、活性或稳定性方面的问题。只有一小部分变体进行了实验研究&#xff0c;但有大量的生物序列数据适合用作机器学习方法的训练数据。程等人开发了AlphaMissense&#xff0c;这是一种…

浅析ChatGPT中涉及到的几种技术点

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Hafnium之中断管理机制

目录 1. GIC所有权 2. 非安全中断处理 3. 安全中断处理 4. 安全中断信号机制