Skip to content

Latest commit

 

History

History
175 lines (118 loc) · 3.76 KB

2014-08-18 在 Qt 中使用 opencv.md

File metadata and controls

175 lines (118 loc) · 3.76 KB
  • tags: tech
  • date: 2014-08-18

在 Qt 中使用 opencv

本文讲述 Windows 环境下使用 Qt Creator 搭建 Qt 库与 opencv 库联合开发环境的过程

一: 使用 qt 中 mingw 来编译 opencv 源码

下载 cmake, 并添加进环境变量

打开 cmd 运行窗口输入

set PATH=%PATH%;C:\apps\cmake-3.0.0-win32-x86\bin

如图:

2014 08 18 在 Qt 中使用 opencv [tech] 86304451cd9e4df097c92d96b32c4524/2014-08-18-1.png

保证环境变量中包含 cmake 和 mingw

使用 cmake 生成 Makefile 文件

cmake -G "MinGW Makefiles" c:\apps\opencv\sources

指定 "MinGW Makefiles" 为编译器

2014 08 18 在 Qt 中使用 opencv [tech] 86304451cd9e4df097c92d96b32c4524/2014-08-18-2.png

使用 ming32-make 编译:

mingw32-make

2014 08 18 在 Qt 中使用 opencv [tech] 86304451cd9e4df097c92d96b32c4524/2014-08-18-3.png

构建 opencv 链接库:

mingw32-make install

2014 08 18 在 Qt 中使用 opencv [tech] 86304451cd9e4df097c92d96b32c4524/2014-08-18-4.png

当前工作目录下的 install 文件夹即为所需要的头文件与函数库

二: 在 Qt Creator 中使用 Qt 图形库结合 opencv 操作 webcam

建立一个 Qwidget 工程, 在界面上放置一个 label 用来显示如片,两个 button 控摄像机的开关, 如下图所示:

2014 08 18 在 Qt 中使用 opencv [tech] 86304451cd9e4df097c92d96b32c4524/2014-08-18-5.png

编辑头文件如下:

fndef FRAME_H
#define FRAME_H

#include <QWidget>
#include <QTimer>
#include <QPainter>
#include <QImage>
#include <opencv2/opencv.hpp>

using namespace cv;
#define FPS 30

namespace Ui {
class Frame;
}

class Frame : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Frame *ui;
    VideoCapture cap;
    QTimer timer;
    Mat img;

private slots:
    void openCamera();
    void closeCamera();
    void readFrame();
};

#endif // FRAME_H

源文件:

#include "frame.h"
#include "ui_frame.h"
#include "opencv2/opencv.hpp"

Frame::Frame(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Frame)
{
    ui->setupUi(this);

    connect(&timer, SIGNAL(timeout()), this, SLOT(readFrame()));
    connect(ui->close, SIGNAL(clicked()), this, SLOT(closeCamera()));
    connect(ui->open, SIGNAL(clicked()), this, SLOT(openCamera()));

}

Frame::~Frame()
{
    delete ui;
}

void Frame::openCamera()
{
    cap.open(0);
    timer.start(FPS);
}

void Frame::closeCamera()
{
    timer.stop();
    cap.release();
}

void Frame::readFrame()
{
    cap >> img;
    cvtColor(img, img, CV_BGR2RGB);
    QImage im((unsigned char *)img.data, img.cols, img.rows, QImage::Format_RGB888);
    ui->pic->setPixmap(QPixmap::fromImage(im));
}

源码完成后在工程文件中加入相应的头文件与库进行编译:

INCLUDEPATH += C:\apps\opencv2.4.9\include\

LIBS += -L"C:\apps\opencv2.4.9\x64\mingw\lib"
LIBS += -lopencv_core249.dll
LIBS += -lopencv_highgui249.dll
LIBS += -lopencv_imgproc249.dll
LIBS += -lopencv_legacy249.dll
LIBS += -lopencv_ml249.dll
LIBS += -lopencv_video249.dll

编译运行即可,结果如下:

2014 08 18 在 Qt 中使用 opencv [tech] 86304451cd9e4df097c92d96b32c4524/2014-08-18-6.png

2014 08 18 在 Qt 中使用 opencv [tech] 86304451cd9e4df097c92d96b32c4524/2014-08-18-7.png

注意:

  1. 运行程序时需要将 C:\apps\opencv2.4.9\x64\mingw\bin 目录添加进系统 PATH 以保证库的完整
  2. 文中用到的 Qt、cmake 和 已经编译好的 opencv 库下载地址:附件