Vs2022+QT+Opencv 一些需要注意的地方
创始人
2024-12-01 22:33:29
0

要在vs2022创建QT项目,先要安装一个插件Qt Visual Studio Tools,根据个人经验选择LEGACY Qt Visual Studio Tools好一些,看以下内容之前建议先在vs2022中配置好opencv,配置方式建议以属性表的形式保存在硬盘上。

 设置QT路径

 

打开vs2022 ,选择Qt Widgets Application

 

这里不清楚为什么只能选择一个,就默认Next吧

 点Finish后如下图所示,双击ui文件

修改头文件,增加2行,

private slots:     void on_buttonOpen_clicked();

以及修改最后1行如图 

Ui::QtWidgetsApplication1Class *ui;

 

修改主文件cpp之前,先加载配置好的opencv属性表(这个是vs2022中配置opencv的问题,这里不详细展开,主要讲vs中qt的使用)

 

opencv的属性表加载之后,就可以调用opencv功能了,QtWidgetsApplication1.cpp头部增加以下代码

 修改后的内容如下

#include "qtpro2.h" #include  #include  #include   #include  #include   using namespace cv; using namespace std;  qtpro2::qtpro2(QWidget *parent)     : QMainWindow(parent), ui(new Ui::qtpro2Class) {     //ui.setupUi(this); 	ui->setupUi(this); }

给打开图片这个按钮加上代码,功能是读取一张图片,并等比例(不变形)缩放后显示在Qlabel中

 

Mat img_input; void QtWidgetsApplication1::on_pushButton_clicked() {      QString filename = QFileDialog::getOpenFileName(this, "打开图像文件", "C:/Users", "Image Files (*.bmp;*.png;*.jpg)");      if (filename.isEmpty()) {         QMessageBox::information(this, "提示", "文件打开失败1!");         return;     }      img_input = cv::imread(filename.toLocal8Bit().toStdString());      if (img_input.empty()) {          QMessageBox::information(this, "提示", "文件打开失败2!");         return;     }      cv::Mat temp;     cv::cvtColor(img_input, temp, cv::COLOR_BGR2RGB);      // 直接将文件名传递给 QPixmap 进行加载     QPixmap pixmap = QPixmap::fromImage(QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_RGB888));      if (pixmap.isNull()) {         QMessageBox::information(this, "提示", "文件打开失败2!");         return;     }      // 获取 label 的尺寸     int labelWidth = ui->labelPic->width();     int labelHeight = ui->labelPic->height();      // 将 QPixmap 进行缩放     QPixmap scaledPixmap = pixmap.scaled(labelWidth, labelHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);      // 将缩放后的图像设置到 label 中     ui->labelPic->setPixmap(scaledPixmap);     ui->labelPic->setScaledContents(false);      ui->labelPic->setAlignment(Qt::AlignCenter);   }

 到这一步,基本功能就完成,可以先生成项目,再运行看下

运行之后 ,可以看到可以选择图片了,不过窗口标题中文乱码

没意外的话,图片会显示在Label中,现在处理下标题乱码问题

 .

保存之后,要重新生成,再运行,我这里是生效了

 至此,vs20022中使用qt调用opencv,从0到1的跨越应该是成功了,后面如果时间允许,再加一些图片处理的功能,像锐化,素描化并保存的功能,希望对新手有点点帮助哈

QtWidgetsApplication1.cpp 全部代码

#include "QtWidgetsApplication1.h"  #include  #include  #include   #include  #include   using namespace cv; using namespace std;   QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)     : QMainWindow(parent) ,ui(new Ui::QtWidgetsApplication1Class) {     //ui.setupUi(this);//修改前     ui->setupUi(this);//修改后 }  QtWidgetsApplication1::~QtWidgetsApplication1() {}   Mat img_input; void QtWidgetsApplication1::on_pushButton_clicked() {      QString filename = QFileDialog::getOpenFileName(this, "打开图像文件", "C:/Users", "Image Files (*.bmp;*.png;*.jpg)");      if (filename.isEmpty()) {         QMessageBox::information(this, "提示", "文件打开失败1!");         return;     }      img_input = cv::imread(filename.toLocal8Bit().toStdString());      if (img_input.empty()) {          QMessageBox::information(this, "提示", "文件打开失败2!");         return;     }      cv::Mat temp;     cv::cvtColor(img_input, temp, cv::COLOR_BGR2RGB);      // 直接将文件名传递给 QPixmap 进行加载     QPixmap pixmap = QPixmap::fromImage(QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_RGB888));      if (pixmap.isNull()) {         QMessageBox::information(this, "提示", "文件打开失败2!");         return;     }      // 获取 label 的尺寸     int labelWidth = ui->labelPic->width();     int labelHeight = ui->labelPic->height();      // 将 QPixmap 进行缩放     QPixmap scaledPixmap = pixmap.scaled(labelWidth, labelHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);      // 将缩放后的图像设置到 label 中     ui->labelPic->setPixmap(scaledPixmap);     ui->labelPic->setScaledContents(false);      ui->labelPic->setAlignment(Qt::AlignCenter);   }

相关内容

热门资讯

透视肯定!pokermaste... 透视肯定!pokermaster脚本(透视)其实有挂,靠谱教程(有挂德州)-哔哩哔哩1、许多玩家不知...
一分钟解谜!hhpoker买挂... 您好,hhpoker买挂这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多...
透视辅助!wepoker有没有... 透视辅助!wepoker有没有挂(透视)真是真的是有挂,2025新版教程(有挂最新版)-哔哩哔哩1、...
第2分钟揭露!德州hhpoke... 第2分钟揭露!德州hhpoker脚本(透视)其实是真的挂,存在挂教程(证实有挂)-哔哩哔哩1、全新机...
透视免费!hhpoker底牌透... 透视免费!hhpoker底牌透视脚本(透视)总是是有挂,玩家教你(有挂俱乐部)-哔哩哔哩透视免费!h...
第二分钟必备!aa poker... 第二分钟必备!aa poker辅助(透视)确实存在有挂,力荐教程(有挂透视)-哔哩哔哩1、aa po...
透视讲解!哈糖大菠萝有挂吗5个... 透视讲解!哈糖大菠萝有挂吗5个常用方法(透视)竟然真的有挂,安装教程(有挂靠谱)-哔哩哔哩1、下载好...
十分钟透视!约局吧是否有挂(透... 十分钟透视!约局吧是否有挂(透视)总是是真的挂,安装教程(有挂工具)-哔哩哔哩亲,关键说明,约局吧是...
透视能赢!竞技联盟辅助(透视)... 您好,竞技联盟辅助这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩家在...
8分钟解谜!哈糖大菠萝挂法(透... 您好,哈糖大菠萝挂法这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩家...