一、设计UI与代码
简单的Ui布局设计
.pro文件添加如下:
win32
{
message('运行win32版本')
INCLUDEPATH += E:\opencv3\opencv\sources\build\install\include\
E:\opencv3\opencv\sources\build\install\include\opencv2\
E:\opencv3\opencv\sources\build\install\include\opencv
LIBS += -L E:\opencv3\opencv\sources\build\install\x64\mingw\lib\libopencv_*.a
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <opencv2/opencv.hpp>
#include <QMainWindow>
#include <QTimer>
#include <QImage>
#include <QPixmap>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void Init();
private slots:
void playing();
//生成代码
void on_play_clicked();
void on_stop_clicked();
private:
Ui::MainWindow *ui;
QTimer *p_timer;
QString filename;
cv::VideoCapture *capture;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
p_timer = new QTimer(this);
p_timer->setInterval(30);
connect(p_timer,SIGNAL(timeout()),this,SLOT(playing()));
ui->play->setEnabled(true);
ui->stop->setEnabled(false);
Init();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::Init()
{
capture = new cv::VideoCapture("E:\\Desktop\\bb1893d5908d24f15eee88beeb7e1537.mp4");
}
void MainWindow::playing()
{
cv::Mat frame;
*capture >> frame;
if (frame.empty()) return;
cv::cvtColor(frame, frame, cv::COLOR_BGR2RGB);
QImage disImage = QImage((uchar*)(frame.data),frame.cols,frame.rows,frame.step,QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(disImage));
}
void MainWindow::on_play_clicked()
{
p_timer->start();
ui->play->setEnabled(false);
ui->stop->setEnabled(true);
}
void MainWindow::on_stop_clicked()
{
p_timer->stop();
ui->play->setEnabled(true);
ui->stop->setEnabled(false);
}
三、效果演示
鸣谢与参考
https://blog.csdn.net/wuquan_1230/article/details/106272119