首先启动Qt Creator,我们将来创建gui应用。
打开mainwindow.ui,拖动两个push button到对话框中,同时修改两个按钮的名字,分别为open image 和process.
然后分别右击两个按钮,出现:
然后会跳到mainwindow.cpp中,
此时我们需要添加如下代码:
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files (*.png *.jpg *.bmp)")); image= cv::imread(fileName.toAscii().data()); cv::namedWindow("Original Image"); cv::imshow("Original Image", image); } void MainWindow::on_pushButton_2_clicked() { cv::flip(image,image,1); cv::namedWindow("Output Image"); cv::imshow("Output Image", image); }
但在之前对mainwindow.h头文件进行修改,不然会出问题:
#ifndef MAINWINDOW_H #define MAINWINDOW_H //添加如下代码 #include <QMainWindow> #include <QtGui> #include <QFileDialog> #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked(); private: Ui::MainWindow *ui; cv::Mat image; }; #endif // MAINWINDOW_H
自此代码部分完成。便开始编译,但出现下面的错误:
然后查阅了下, 发现在新版的qt5.1中取消了toAscii函数,用toLatin1函数代替。
修改了下:
image= cv::imread(fileName.toLatin1().data());
好了,运行成功。
如图:
代码下载地址:http://download.csdn.net/download/xiaojidan2011/5923177
接下来我们添加一个标签label,通过ui对象中相应的指针访问该对象,代码如下:
cv::flip(image, image,1); cv::cvtColor(image,image,CV_BGR2RGB); QImage img=QImage( (const unsigned char*)(image.data),image.cols,image.rows, QImage::Format_RGB888); ui->label->setPixmap(QPixmap::fromImage(img)); ui->label->resize(ui->label->pixmap()->size());
如图所示: