1、首先创建QT Gui程序项目(不细说了)
2、修改pro配置文件,增加OpenCV支持
3、利用QT Creater 创建一个如下布局,其中图片显示为一个label控件
4、QT中中文乱码解决方法
网上有不少关于qt中文乱码解决的方法,我找到了一个比较好的办法,main函数添加如下函数即可:
#include <QtGui/QApplication> #include "mainwindow.h" #include <QTextCodec> int main(int argc, char *argv[]) { //处理中文乱码 QTextCodec::setCodecForTr(QTextCodec::codecForName("system")); QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }5、如图,可以看到程序实现了显示一张图片,翻转一张图片的功能
#include "mainwindow.h" #include "ui_mainwindow.h" #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <QFileDialog> #include <QLineEdit> #include <QString> #include <QMessageBox> #include <QRadioButton> #include <QImage> #include <QLabel> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_open_clicked() { //打开一个图片文件,并将文件目录写入到输入框中 QString strFileName = QFileDialog::getOpenFileName(this,tr("打开图片"),".",tr("图片文件 (*.png *.jpg *.jpeg *.bmp)")); QLineEdit *pLineEdit = (QLineEdit *)ui->dirEdit; pLineEdit->setText(strFileName); } void MainWindow::on_imgShow_clicked() { //首先提取文件目录,如果为空则弹出警告对话框 QLineEdit *pLineEdit = (QLineEdit *)ui->dirEdit; QString strFileName = pLineEdit->text(); if(strFileName.isEmpty()) { QMessageBox::about(this,tr("警告"),tr("请先选择文件")); return; } //读取该图片文件 cv::Mat image = cv::imread(strFileName.toAscii().data()); if(!image.data) { QMessageBox::about(this,tr("警告"),tr("图片打开错误")); return; } //转换图片的格式,在QT下利用OpenCV读取的图片数据如果要生成一张QImage类型图片需要转换格式 cv::cvtColor(image,image,CV_RGB2BGR); //除了在label显示图片,同时利用OpenCV自身的gui弹出一图片窗口,可以看到如果不转换OpenCV GUI显示正常 cv::namedWindow("图片"); cv::imshow("图片", image); QImage img= QImage((const unsigned char*)(image.data), image.cols,image.rows,QImage::Format_RGB888); // img = img.scaled(ui->QImgShow->size()); // 根据Label设置图片大小,并显示 ui->QImgShow->setPixmap(QPixmap::fromImage(img).scaled(ui->QImgShow->size())); // resize the label to fit the image // ui->QImgShow->resize(ui->QImgShow->pixmap().size()); } void MainWindow::on_filpImg_clicked() { QLineEdit *pLineEdit = (QLineEdit *)ui->dirEdit; QString strFileName = pLineEdit->text(); if(strFileName.isEmpty()) { QMessageBox::about(this,tr("警告"),tr("请先选择文件")); return; } cv::Mat image = cv::imread(strFileName.toAscii().data()); if(!image.data) { QMessageBox::about(this,tr("警告"),tr("图片打开错误")); return; } cv::Mat result; //根据单选按钮翻转图片 int iflipType; if(ui->radioH->isChecked()) { iflipType = 1; }else if(ui->radioV->isChecked()){ iflipType = 0; }else{ iflipType = -1; } //翻转图片,弹出OpenCV 的gui 显示图片 cv::flip(image,result,iflipType); cv::namedWindow("图片"); cv::imshow("图片", result); }
项目代码下载