使用Qt实现图片拼接功能
Qt可以在自带的界面编辑器Qt Creator下编写,也可以在VS下配置Qt 环境编写,本文将介绍在Creator下编写一个简单的界面用以实现图片拼接的功能。
图片拼接需要使用到opencv库,所以需要在Qt Creator 下配置一下opencv,此步骤可百度教程即可,本文就不再赘述,现给出pro文件内的环境配置代码(本文以2.4.13版本为例)。
INCLUDEPATH+=D:\opencv2413\opencv\build\include\
D:\opencv2413\opencv\build\include\opencv\
D:\opencv2413\opencv\build\include\opencv2
LIBS +=-LD:\opencv2413\opencv\build\x86\vc11\lib \
-lopencv_ml2413d\
-lopencv_calib3d2413d\
-lopencv_contrib2413d\
-lopencv_core2413d\
-lopencv_features2d2413d\
-lopencv_flann2413d\
-lopencv_gpu2413d\
-lopencv_highgui2413d\
-lopencv_imgproc2413d\
-lopencv_legacy2413d\
-lopencv_objdetect2413d\
-lopencv_ts2413d\
-lopencv_video2413d\
-lopencv_nonfree2413d\
-lopencv_ocl2413d\
-lopencv_photo2413d\
-lopencv_stitching2413d\
-lopencv_superres2413d\
-lopencv_videostab2413d
在环境配置完成后,开始ui设计,本次设计界面如下,在File下拉框内添加Open打开动作用以打开图片。
在Creator下的控件关联比较方便,可以不需要使用connect函数,直接“转到槽”即可。
先打开两张图片,并显示在label1、label2控件上,然后实现点击按钮进行拼接,并将拼接结果图片显示在label3控件上。
代码实现如下:
//头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <QFileDialog>
#include <QString>
#include <QTextCodec>
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/legacy/legacy.hpp>
#include <opencv2/stitching/stitcher.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <QPainter>
using namespace cv;
using namespace std;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Mat image01,image02;
QImage img01,img02,imgpano;
typedef struct
{
Point2f left_top;
Point2f left_bottom;
Point2f right_top;