您的位置:首页 > 理论基础

【Oencv2计算机视觉学习笔记(二)】使用Qt创建GUI应用

2014-08-28 10:16 1006 查看
书中大量例程均使用Qt GUI应用,后文提到的Model-View-Controller模式也是非常值得借鉴的,所以我们就从Qt GUI开始吧

启动Qt Creator 新建一个 Qt Widget Application:



直接点击完成即可,并记得给工程.pro文件添加OpenCV的路径

之后可以看到有一个界面文件mainwindow.ui 它定义了UI的布局,利用此,我们可以通过拖拽不同的控件直观的设计我们想要的界面,如图。



右击设计好的按钮,在菜单中选择“转到槽”书中英文写的是“Go to slot"(这蛋疼的翻译啊),选择clicked()选项,之后会跳转到mainwindow.cpp文件中,并添加了Slot函数,当接收到该按键时,Click()将调用它。

void MainWindow::on_ButtonOpenImage_clicked()
{

}
为了可以实现功能,我们对MainWindow类进行进一步的修改,打开mainWindow.h,添加OpenCV中core.hpp,以及highgui.hpp头文件,并定义了一个cv::Mat 的成员变量:

#define MAINWINDOW_H

#include <QMainWindow>

<strong>#include <QFileDialog>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp></strong>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_ButtonOpenImage_clicked();

private:
Ui::MainWindow *ui;
<strong>    cv::Mat image;  //图像变量</strong>
};

#endif // MAINWINDOW_H


第一个按钮为打开图像,我们把相应的操作写在对应的函数槽中(为了编程方便,写入了using namespace cv):

void MainWindow::on_ButtonOpenImage_clicked()
{
QString filename = QFileDialog::getOpenFileName(this,tr("Open Image"),".",tr("Image Files(*.png *.jpg *.jpeg *.bmp)"));
image = imread(filename.toLatin1().data());
namedWindow("Original Image");
imshow("Original Image",image);
}


注意哈!Qt5以后已经把toAscii()函数去掉了(书中使用该函数),需要用toLatin1()代替掉。

同样的,我们为第二个按钮增加clicked()槽,并对函数槽进行编辑:

void MainWindow::on_ButtonProcess_clicked()
{
flip(image,image,1);
namedWindow("Output Image");
imshow("Output Image",image);
}


其中file()函数是将图像进行翻转。

运行就OK了!

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