vs2015 + opencv3.4.0 + qt msvc2015_64-5.7.1 视屏显示

1、qt application

2、qtvideoread.cpp中代码为:

#include "qtvideoread.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <QString>
#include <QLabel>
#include <QPainter>
#include <QTimer>

qtvideoread::qtvideoread(QWidget *parent, Qt::WindowFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
// 初始化处理,建立QImage和frame的关联,开启定时器
capture.open("E:/studyvsqt/qtvideoread/0920_01.mov");//-1 需要加载所在电脑视屏
if (capture.isOpened())
{
capture >> frame;
if (!frame.empty())
{
cv::cvtColor(frame, frame, CV_BGR2RGB);
cv::flip(frame, frame, 1);
image = new QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, QImage::Format_RGB888);
timer = new QTimer(this);
timer->setInterval(30);
connect(timer, SIGNAL(timeout()), this, SLOT(nextFrame()));
timer->start();
}
}
}

qtvideoread::~qtvideoread()
{

}

void qtvideoread::paintEvent(QPaintEvent * e)
{
// 更新图像
QPainter painter(this);
painter.drawImage(QPoint(0, 12), *image);

}

void qtvideoread::nextFrame()
{// 更新数据
capture >> frame;
if (!frame.empty())
{
cv::cvtColor(frame, frame, CV_BGR2RGB);
cv::flip(frame, frame, 1);
this->update();
}
}

3、qtvideoread.h中代码为:

#ifndef QTVIDEOREAD_H
#define QTVIDEOREAD_H

#include <QtWidgets/QMainWindow>
#include "ui_qtvideoread.h"

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

class qtvideoread : public QMainWindow
{
Q_OBJECT
/*
public:
qtvideoread(QWidget *parent = 0);
~qtvideoread();

private:
Ui::qtvideoreadClass ui;
*/
public:
qtvideoread(QWidget *parent = 0, Qt::WindowFlags flags = 0);
~qtvideoread();
protected:
void paintEvent(QPaintEvent * e);

private:
Ui::qtvideoreadClass ui;
cv::Mat frame;
cv::VideoCapture capture;
QImage *image;
QTimer *timer;

private slots:
void nextFrame();

};

#endif // QTVIDEOREAD_H

4、点击运行就可以了

5、参考的网址:https://blog.csdn.net/yang_xian521/article/details/7042687

posted @ 2018-09-20 17:43  我从花中来  阅读(204)  评论(0编辑  收藏  举报