利用QT GUI写OpenCV程序入门

来源:互联网 发布:学编程的优势 编辑:程序博客网 时间:2024/04/30 15:50

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);}

项目代码下载

原创粉丝点击