Qt + OpenCV 简单播放MP4视频

一、设计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

猜你喜欢

转载自blog.csdn.net/wsp_1138886114/article/details/123085710
今日推荐