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

新建一个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>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-02 23:30:26

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

Qt 5.3 下OpenCV 2.4.11 开发 目录

Qt 5.3 下OpenCV2.4.11 开发(1)图片预览 Qt 5.3 下OpenCV 2.4.11 开发(2)摄像头采集 版权声明:本文为博主原创文章,未经博主允许不得转载.

Qt 5.3 下OpenCV 2.4.11 开发(0)图像处理基本概念

1.普通情况下的RGB彩色图像:它的每一个像素点都是由三个通道组成,即红色(R).绿色(G)和蓝色(B).8位三通道彩色图像就是每一个像素中每一个通道的取值范围都是 0~255(即二进制下的8位数),而整幅彩色图像则是由三个通道的图像所组成.在数据中的存储方式是依照像素连续存储的,而每一个像素中的数据存储也是按RGB连续存储的.当然,有些图片格式中像素数据是按BGR存储的,这个视情况而定. 2.灰度图像:它仅仅有一个颜色通道,所以在做图像处理的时候速度非常快,它的每一个像素是通过彩色图像的三个通

Qt 5.3 下OpenCV 2.4.11 开发(10)使用鼠标回调函数对视频帧截图

Qt 新建控制台程序,main.cpp 代码如下: #include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace cv; using namespace std;

Qt 5.3 下OpenCV 2.4.11 开发(11)CamShift 目标跟踪

控制台应用下,使用鼠标在预览摄像头上进行截图,截图内容为目标所在区域的矩形,然后利用函数CamShift 函数对目标进行跟踪,代码如下,要记得添加项目引用库,章节目录有: #include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #inclu

Qt 5.3 下OpenCV 2.4.11 开发(5)最高效的像素引用

OpenCV 提供一个函数 getTickCount() ,能够用来測量一段代码的执行时间.另一个函数 getTickFrequency() 用来返回每秒内的时钟周期.代码操作例如以下: double duration; duration = static_cast<double>(getTickCount()); colorReduce(src); duration = static_cast<double>(getTickCount()) - duration; duratio

Qt 5.3 下OpenCV 2.4.11 开发(9)直方图均衡化

接着上面的章节,我们在 Histogram1D 类中加入一个新方法,即直方图均衡化的方法,现在贴出完整的代码,Histogram1D 类 头文件如下: #ifndef HISTOGRAM1D_H #define HISTOGRAM1D_H #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> using namespace

Qt 5.3 下OpenCV 2.4.11 开发(15)滤波函数

代码列出了高斯滤波.中值滤波.均值滤波和双边滤波: #include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace cv; using namespace std;

Qt 5.3 下OpenCV 2.4.11 开发(8)查表法直方图修改图像

接着上节内容,本节添加两个方法 stretch() 方法和 applyLookUp() 方法.第一个方法用于拉伸直方图的准备工作,即排除直方图中没有像素值存在的项:第二个方法用查表法拉伸图像.现在贴出完整代码,Histogram1D.h 代码段如下: #ifndef HISTOGRAM1D_H #define HISTOGRAM1D_H #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #

Qt 5.3 下OpenCV 2.4.11 开发(7)单通道直方图绘制

函数中主要使用的 calcHist() 函数来统计一个直方图,直方图统计类的头文件和源文件,头文件代码如下: #ifndef HISTOGRAM1D_H #define HISTOGRAM1D_H #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> using namespace cv; using namespace