版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhango5/article/details/80915895
1. OpenCV环境配置
下载地址:https://opencv.org/releases.html
在这里我选择的3.0.0,好像3.0.0是最后一个支持vs2012也就是vc11的版本吧。因为是windows系统,所以选择Win pack,下载下来的文件 opencv-3.0.0.exe 双击会进行解压,我这里解压到 d:/opencv3.0.0
配置环境变量:系统变量---Path中添加 D:\opencv3.0.0\opencv\build\x86\vc11\bin
2. 创建Qt工程
在pro文件中增加以下内容,配置引用的库文件:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <opencv2/opencv.hpp>
#include <QLabel>
#include <QImage>
#include <QDebug>
using namespace cv;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QLabel* _label;
VideoCapture _cap;
Mat _frame;
QImage _image;
protected:
void timerEvent(QTimerEvent* e);
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
QImage Mat2QImage(cv::Mat cvImg);
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
_label = new QLabel(this);
int camid = 0; // 视频设备id
if(!_cap.open(camid))
{
qDebug() << "camera open failed.";
return;
}
// 读取一帧获得视频大小以改变窗口大小
int videoWidth = _cap.get(CAP_PROP_FRAME_WIDTH);
int videoHeight = _cap.get(CAP_PROP_FRAME_HEIGHT);
this->setFixedSize(videoWidth, videoHeight);
_label->setFixedSize(this->size());
// 定时获取视频信息
startTimer(100);
}
MainWindow::~MainWindow()
{
}
void MainWindow::timerEvent(QTimerEvent *e)
{
_cap >> _frame;
_image = Mat2QImage(_frame);
_label->setPixmap(QPixmap::fromImage(_image));
}
QImage Mat2QImage(cv::Mat cvImg)
{
QImage qImg;
cv::cvtColor(cvImg, cvImg, CV_BGR2RGB); // 颜色格式转换
qImg = QImage((const unsigned char*)(cvImg.data),
cvImg.cols, cvImg.rows,
cvImg.cols * cvImg.channels(),
QImage::Format_RGB888);
return qImg;
}
编译运行即可。
源码下载地址:https://download.csdn.net/download/zhango5/10520038