利用QT GUI写OpenCV程序入门

1、首先创建QT Gui程序项目(不细说了)

2、修改pro配置文件,增加OpenCV支持

3、利用QT Creater 创建一个如下布局,其中图片显示为一个label控件

利用QT GUI写OpenCV程序入门_第1张图片

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

项目代码下载

你可能感兴趣的:(UI,image,delete,System,qt)