- tags: tech
- date: 2014-08-18
本文讲述 Windows 环境下使用 Qt Creator 搭建 Qt 库与 opencv 库联合开发环境的过程
打开 cmd 运行窗口输入
set PATH=%PATH%;C:\apps\cmake-3.0.0-win32-x86\bin
如图:
保证环境变量中包含 cmake 和 mingw
cmake -G "MinGW Makefiles" c:\apps\opencv\sources
指定 "MinGW Makefiles" 为编译器
mingw32-make
mingw32-make install
当前工作目录下的 install 文件夹即为所需要的头文件与函数库
建立一个 Qwidget 工程, 在界面上放置一个 label 用来显示如片,两个 button 控摄像机的开关, 如下图所示:
编辑头文件如下:
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
编译运行即可,结果如下:
注意:
- 运行程序时需要将 C:\apps\opencv2.4.9\x64\mingw\bin 目录添加进系统 PATH 以保证库的完整
- 文中用到的 Qt、cmake 和 已经编译好的 opencv 库下载地址:附件