目录

1. 新建qt项目,流程如下

2. 直接上代码

2.1 头文件

2.2 cpp文件

3. 代码说明

3.1 关于刷新视频帧

3.2 关于接口

4. 代码链接


关于如何在vs studio中配置qt和创建qt项目,百度就可以了...

1. 新建qt项目,流程如下

如果直接使用qt的话,就不需要改,修改的目的就是像qt里那样使用指针;

需要注意的是:

添加控件后,先运行一遍,再使用ui->控件,不然极有可能找不到;

如果还是找不到控件,在ui_QtWidgetsApplication1.h的最后一行加 } ,然后保存,运行,再删掉 } 就可以刷新就控件了。

1. 选择 qt widgets application模板
2. 选择release配置
3. 修改头文件:Ui::QtWidui_getsApplication1Class ui -> Ui::QtWidgetsApplication1Class *ui
4. 修改cpp文件:QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QMainWindow(parent){ui.setupUi(this);}改为:QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QMainWindow(parent),ui(new Ui::QtWidgetsApplication1Class){ui->setupUi(this);}

2. 直接上代码

2.1 头文件

#ifdef QTIMER
#pragma once#include <QtWidgets/QMainWindow>
#include "ui_qt_for_detection.h"
#include <opencv2/opencv.hpp>
#include <QTimer>
class qt_for_detection : public QMainWindow
{Q_OBJECTpublic:qt_for_detection(QWidget *parent = Q_NULLPTR);cv::VideoCapture cap;cv::Mat frame;QImage showimg;bool display = false;~qt_for_detection();
private slots:void on_comboBox_activated(const QString& arg1);void show_opencv();
private:Ui::qt_for_detectionClass *ui;QTimer* timer;};
#else
#pragma once#include <QtWidgets/QMainWindow>
#include "ui_qt_for_detection.h"
#include <opencv2/opencv.hpp>
class qt_for_detection : public QMainWindow
{Q_OBJECTpublic:qt_for_detection(QWidget* parent = Q_NULLPTR);cv::VideoCapture cap;cv::Mat frame;QImage showimg;bool display = false;
private:Ui::qt_for_detectionClass* ui;
};#endif

2.2 cpp文件

#ifdef QTIMER
#include "qt_for_detection.h"
#include <QDebug>#include <QDate>
#include <QWidget>void Mat2QImage(cv::Mat frame, QImage& image) {cv::cvtColor(frame, frame, cv::COLOR_BGR2RGB);image = QImage(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888);
}void qt_for_detection::show_opencv() {if(!display){cap >> frame;if (!frame.empty()) {qDebug() << "No images" << endl;};cv::resize(frame, frame, cv::Size(224, 224));switch (ui->comboBox->currentIndex()) {case 0: {Mat2QImage(frame, showimg);ui->label->setPixmap(QPixmap::fromImage(showimg));break;}case 1: {cv::cvtColor(frame, frame, cv::COLOR_RGB2BGR);Mat2QImage(frame, showimg);ui->label->setPixmap(QPixmap::fromImage(showimg));break; }}}
}qt_for_detection::qt_for_detection(QWidget* parent): QMainWindow(parent),ui(new Ui::qt_for_detectionClass)
{ui->setupUi(this);cap.open(0);display = false;connect(ui->pushButton, &QPushButton::clicked, [=]() {display = true; });connect(ui->pushButton1, &QPushButton::clicked, [=]() {display = false; });
}void qt_for_detection::on_comboBox_activated(const QString& arg1)
{timer = new QTimer(this);timer->setInterval(1);connect(timer, SIGNAL(timeout()), this, SLOT(show_opencv()));timer->start(1);
}qt_for_detection::~qt_for_detection() {delete timer;timer = nullptr;
}
#else
#include "qt_for_detection.h"
#include <QDebug>void Mat2QImage(cv::Mat frame, QImage& image) {cv::cvtColor(frame, frame, cv::COLOR_BGR2RGB);image = QImage(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888);
}qt_for_detection::qt_for_detection(QWidget* parent): QMainWindow(parent),ui(new Ui::qt_for_detectionClass)
{ui->setupUi(this);connect(ui->pushButton1, &QPushButton::clicked, [=]() {cap.open(0);display = false;while (1) {if (display) break;cap >> frame;if (frame.empty()) {qDebug() << "No images" << endl;break;};cv::resize(frame, frame, cv::Size(224, 224));switch (ui->comboBox->currentIndex()) {case 0: {cv::waitKey(1);Mat2QImage(frame, showimg);ui->label->setPixmap(QPixmap::fromImage(showimg));break;}case 1: {cv::cvtColor(frame, frame, cv::COLOR_RGB2BGR);cv::waitKey(1);Mat2QImage(frame, showimg);ui->label->setPixmap(QPixmap::fromImage(showimg));break; }}}cap.release();});connect(ui->pushButton, &QPushButton::clicked, [=]() {display = true; });
}
#endif

3. 代码说明

3.1 关于刷新视频帧

qt里面显示视频需要实时的刷新每一帧,代码中使用两种方法:
1. 使用waitKey(1)

2. 使用timer刷新:使用timer刷新帧时,需要在窗口中选择comboBox中的任一值以启动程序timer

由于没有定义QTIMER,因此使用waitKey(1)实现刷新

3.2 关于接口

通过ui->comboBox->currentIndex()可以选择算法分支,如:

0:图像分类;

1:目标检测;

2:语义分割;

使用说明如下:

while (1) {if (display) break;cap >> frame;if (frame.empty()) {qDebug() << "No images" << endl;break;};cv::resize(frame, frame, cv::Size(224, 224));switch (ui->comboBox->currentIndex()) {case 0: {cv::waitKey(1);// 这里调用你的视觉算法,使得frame为想显示的图片;// yolov5(frame);Mat2QImage(frame, showimg);ui->label->setPixmap(QPixmap::fromImage(showimg));break;}case 1: {// 这里调用你的视觉算法,使得frame为想显示的图片;// yolov6(frame);// cv::cvtColor(frame, frame, cv::COLOR_RGB2BGR);cv::waitKey(1);Mat2QImage(frame, showimg);ui->label->setPixmap(QPixmap::fromImage(showimg));break; }}}

4. 代码链接

GitHub - liuweixue001/qt_Template_for_cv: qt模板用于计算机视觉程序

qt模板用于展示cv算法(使用vs studio+qt插件实现)相关推荐

  1. (五)比赛中的CV算法(上)cv基础知识和opencv的api

    5.比赛中的CV算法 讲了这么多,视觉组的重头戏--算法终于来了. 在大部分时候我们都不需要设计底层的算法,而是直接调用封装好的API,设计更具体的应用于特定问题的算法.当然,有必要了解一下造轮子(底 ...

  2. cv算法工程师学习成长路线

    前言 一,计算机系统 1.1,计算机系统书籍 1.2,设计模式教程 二,编程语言 2.1,C++ 学习资料 2.2,Python 学习资料 三,数据结构与算法 3.1,数据结构与算法课程 3.2,算法 ...

  3. 如何跟随有三从零进阶中级CV算法工程师

    再过一段时间可能就要迈出成为真正的创业者的关键一步了,有三AI夏季划再招一些学生作为人才储备,同时也是带一些人真正系统性成为深度学习CV算法工程师. 文/编辑 | 言有三 为什么做季划 为什么要搞季划 ...

  4. ConvNeXt:2022年CV算法工程师抄作业必备手册!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者 | 镜子@知乎(已授权)  转载自 | 极市平台 来源 | https://zhuanlan.zhih ...

  5. 一个CV算法工程师的小反思

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨努力的伍六七@知乎(已授权) 来源丨https://zhuan ...

  6. 35 w年薪,入职CV算法岗,我一个双非本科生如何做到的?

    经过前前后后半年多的努力,我终于成功转型,拿到35万年薪的CV算法岗-- 我是个非985/211的普通本科生,非计算机专业,在毕业前一年就计划转IT,经过一年的努力转型还算顺利! 在经过了近两年的应用 ...

  7. 解题报告:P5960 【模板】差分约束算法(及常用技巧)

    P5960 [模板]差分约束算法 差分约束系统 给出 n 个变量和 m 个约束条件,形如 xi−xj≤ckx_i - x_j \leq c_kxi​−xj​≤ck​,你需要求出一组解,使得所有约束条件 ...

  8. 招聘|追觅科技VSLAM​、CV算法实习生招聘

    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁.如果你需要我们帮助你发布实习或全职岗位,请添加微信号「CV_LAB」. 追觅简介 追觅科技是一家有极客基 ...

  9. 有三AI发布360页11万字深度学习CV算法工程师成长指导手册,可下载收藏打印,未完待续...

    文/编辑 | 言有三 字少事大,各位同学,今天有三AI平台发布<深度学习视觉算法工程师成长指导手册>,超过11万字,360页word文档,可下载收藏打印,且还有大约1/3内容并未完结,最终 ...

最新文章

  1. java中Hashtable中的t为什么是小写(转)
  2. 测试稳压二极管特性:BZT52C4V7
  3. 闷热夏日这个空调太疯狂!
  4. 时频分析:短时傅里叶变换实现(2)
  5. 音高和基频(Pitch and F0)
  6. ZBar 自定义界面
  7. 【存储过程】Merge Into语句实现Insert/Update在Oracle中的应用
  8. 清洁代码_清洁单元测试
  9. oracle怎么查询和插入表,Oracle查询一个表的数据插入到另一个表
  10. 非常有用的101道算法部分常见面试题
  11. (转载)7个去伪存真的JavaScript面试题
  12. 斐讯K1、K2、K2P 刷机、刷入Breed@重庆网吧电竞酒店维护小哥
  13. python实现空气焓值,湿球温度的计算
  14. 如何将已有图片做成透明水印_手把手教你如何使用Photoshop CC 2014给图片添加透明水印的教程-网络教程与技术 -亦是美网络...
  15. 自学Python+Selenium自动化测试
  16. Cocos2d-x 中文标题设置
  17. 服务器如果清理垃圾文件,为citrix服务器清理垃圾文件事件
  18. 机器视觉开源处理库汇总
  19. Android HAL层到驱动代码搜索---基于背光亮度的调试
  20. 爬取《悲伤逆流成河》猫眼信息 | 郭敬明五年电影最动人之作

热门文章

  1. 新增学院/专硕变难!哈尔滨工程大学计算机考研改考!
  2. 观电视剧《渴望》有感
  3. 警惕恶性U盘病毒HDM.exe
  4. 可微偏导数一定存在_函数可微,那么偏导数一定存在,且连续吗?
  5. Cannot update read-only repo
  6. 一些极度损害用户体验的流氓软件和硬件
  7. 广交会时间-广交会地址-广交会图纸-广交会展区
  8. pdf.js清晰度提升办法
  9. 转岗数据分析—学习准备篇
  10. 【链路追踪】skywalking部署流程