Qt + OpenCV 简单播放MP4视频

该博客详细介绍了如何结合OpenCV库和Qt框架来设计一个简单的视频播放器。作者首先展示了.pro文件中添加的路径和库设置,然后在mainwindow.h和mainwindow.cpp文件中定义了UI元素和相关函数,包括视频捕获、帧处理和UI更新。在效果演示部分,作者展示了一个成功运行的视频播放器界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值