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