一、软件
Window 8.1 64位
QT5.6.2
Visual Studil 2015
opencv 3.2.0
二、环境变量与Qt、opencv 配置
具体过程网上大把。
环境变量:Qt\Qt5.6.2\5.6\msvc2015_64\bin和opencv\build\x64\vc14\bin。两个都要添加进去!
Qt、opencv 配置:
三、第一个图形界面程序
3.1新建QT5.1工程
配置完成后,用VS2010新建一个工程,选择QT5 Projects-》QT application,工程名为Qt5test
一键Ok,直接Finish,工程就建立成功了。
3.2 使用QT设计师设计界面以及链接信息/槽
双击qt5test.ui,会弹出来Qt 设计师界面,拖两个按钮添加到界面中,然后双击修改按钮的名称,以及改变按钮的尺寸。
然后链接信息/槽,选中 编辑信息/槽 按钮(如下图),左键Open Image按钮,拖拽,就可以拖出一条链接信号/槽的线,松开鼠标,就弹出编辑出口(如下图)。点击编辑按钮,在槽中添加按钮按下的响应函数,OpenImageClicked()以及ProcessClicked()函数,确定后,点击click,选择OpenImageClicked()作为按钮Open Image的响应函数,同样设置Process的响应函数为ProcessClicked();设计好的界面记得保存,VS2010运行是不会对Qt
Project自动保存,只会加载之前保存的界面
3.3 编写响应函数程序
在QT5test类中声明和定义两个按钮响应函数OpenImageClicked()和ProcessClicked()
双击qt5test.h,在类中添加两个响应函数的声明,添加头文件,以及私有变量cv::Mat image;
[cpp] view plain copy
- #ifndef QT5TEST_H
- #define QT5TEST_H
- #include <QtWidgets/QMainWindow>
- #include <Qlabel>
- #include "ui_qt5test.h"
- #include<opencv2\opencv.hpp>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- using namespace cv;
- class Qt5test : public QMainWindow
- {
- Q_OBJECT
- public:
- Qt5test(QWidget *parent = 0);
- ~Qt5test();
- private:
- Ui::Qt5testClass ui;
- Mat image; //定义私有变量 image
- Mat result;//定义私有变量 result
- private slots: //声明信号函数
- void OpenImageClicked();
- void ProcessClicked();
- };
- #endif // QT5TEST_H
双击qt5test.cpp,定义响应函数,在根目录下添加一张自己喜欢的图片,命名为"img.jpg"
[cpp] view plain copy
- #include "qt5test.h"
- Qt5test::Qt5test(QWidget *parent)
- : QMainWindow(parent)
- {
- ui.setupUi(this);
- }
- Qt5test::~Qt5test()
- {
- }
- void Qt5test::OpenImageClicked()
- {
- image =imread("img.jpg");//读取图像
- cvtColor(image, image, CV_RGB2RGBA);//图像在QT显示前,必须转化成QImage格式,将RGBA格式转化成RGB
- QImage img = QImage((const unsigned char*)(image.data),
- image.cols, image.rows, QImage::Format_RGB32);
- QLabel *label = new QLabel(this);
- label->move(130,50);
- label->setPixmap(QPixmap::fromImage(img));
- label->resize(label->pixmap()->size());
- label->show();
- }
- void Qt5test::ProcessClicked()
- {
- flip(image,result,1);//对图像进行翻转
- QImage img = QImage((const unsigned char*)(result.data),
- result.cols, result.rows, QImage::Format_RGB32);
- QLabel *label = new QLabel(this);
- label->move(380,50);
- label->setPixmap(QPixmap::fromImage(img));
- label->resize(label->pixmap()->size());
- label->show();
- }
3.4 运行程序结果如下