您的位置:首页 > 产品设计 > UI/UE

Qt 5.3 下OpenCV 2.4.11 开发(3)简单的GUI项目

2015-07-29 15:25 375 查看
新建一个GUI项目,QT4为 Qt4 Gui Application,QT5为 Qt Widgets Application,基类选择 QMainWindow

项目实现功能:两个按钮,一个用于在文件夹中选择图片并预览图片,一个按钮用于反转该图片。项目代码如下:

.pro 代码段,关于加入opencv头文件和库函数的代码根据自己开发环境而定。

#-------------------------------------------------
#
# Project created by QtCreator 2015-07-29T14:41:15
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = opencv-test-GUI
TEMPLATE = app

SOURCES += main.cpp\
mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

INCLUDEPATH+=D:\useropencvqt\include\opencv\
D:\useropencvqt\include\opencv2\
D:\useropencvqt\include

LIBS+=D:\useropencvqt\lib\libopencv_calib3d2411.dll.a\
D:\useropencvqt\lib\libopencv_contrib2411.dll.a\
D:\useropencvqt\lib\libopencv_core2411.dll.a\
D:\useropencvqt\lib\libopencv_features2d2411.dll.a\
D:\useropencvqt\lib\libopencv_flann2411.dll.a\
D:\useropencvqt\lib\libopencv_gpu2411.dll.a\
D:\useropencvqt\lib\libopencv_highgui2411.dll.a\
D:\useropencvqt\lib\libopencv_imgproc2411.dll.a\
D:\useropencvqt\lib\libopencv_legacy2411.dll.a\
D:\useropencvqt\lib\libopencv_ml2411.dll.a\
D:\useropencvqt\lib\libopencv_objdetect2411.dll.a\
D:\useropencvqt\lib\libopencv_video2411.dll.a


.h 代码段,注意加入了opencv2的头文件和QFileDialog头文件。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFileDialog>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.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 src;//用于预览图片的 Mat 对象
};

#endif // MAINWINDOW_H


与.h 文件对应的 .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 *.jpeg *.bmp)"));
src = cv::imread(fileName.toLatin1().data());//Qt4的话用 fileName.toAscii().data()
cv::namedWindow("src",0);
cv::imshow("src",src);
}

void MainWindow::on_pushButton_2_clicked()//第二个按钮
{
cv::flip(src, src, 1);
cv::namedWindow("result", 0);
cv::imshow("result", src);
}


main.cpp 代码段,貌似不需要做任何修改

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}


若要在 Gui 界面上预览最后处理的图像,则在 Gui 界面添加一个 Label 标签,然后将第二个按钮的处理函数改成:

void MainWindow::on_pushButton_2_clicked()
{
cv::flip(src, src, 1);
cv::cvtColor(src, src, CV_BGR2RGB);
QImage img = QImage((const unsigned char* )(src.data), src.cols, src.rows,
QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(img));
ui->label->resize(ui->label->pixmap()->size());
}


并且加入头文件 :

#include <opencv2/imgproc/imgproc.hpp>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: