Qt 5.5.1 + OpenCV + VS2012 控制电脑摄像头

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/zhango5/article/details/80915895