使用opencv在Qt控件上播放mp4文件

简介: 使用opencv在Qt控件上播放mp4文件

简介


opencv是一个开源计算机视觉库,功能非常多,这里简单介绍一下OpenCV解码播放Mp4文件,并将图像显示到Qt的QLabel上面。


核心代码


头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include "opencv2/opencv.hpp"
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui.hpp>
#include <opencv2/video.hpp>

using namespace std;
using namespace cv;


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void InitVideo();

private slots:
    void on_play_clicked();
    void playTimer();

    void on_stop_clicked();

private:
    Ui::MainWindow *ui;
    QTimer *m_pTimer;
    VideoCapture *m_pVideo;
};

#endif // MAINWINDOW_H


实现代码


这里需要注意的一点,Qt上显示图像的格式和OpenCV读取的数据格式不一样,需要转换一下:

cv::cvtColor(frame, frame, COLOR_BGR2RGB);//图像格式转换

QImage disImage = QImage((const unsigned char*)(frame.data),frame.cols,frame.rows,frame.cols*frame.channels(),QImage::Format_RGB888);

ui->label->setPixmap(QPixmap::fromImage(disImage));//显示图像

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
using namespace cv;
using namespace std;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_pTimer = new QTimer;
    m_pTimer->setInterval(30);  //定时30毫秒读取一帧数据
    connect(m_pTimer, &QTimer::timeout, this, &MainWindow::playTimer);

    ui->play->setEnabled(true);
    ui->stop->setEnabled(false);

    InitVideo();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::playTimer()
{
    Mat frame;

    //从cap中读取一帧数据,存到fram中
    *m_pVideo >> frame;
    if ( frame.empty() )
    {
        return;
    }
    cv::cvtColor(frame, frame, COLOR_BGR2RGB);//图像格式转换
    QImage disImage = QImage((const unsigned char*)(frame.data),frame.cols,frame.rows,frame.cols*frame.channels(),QImage::Format_RGB888);
    ui->label->setPixmap(QPixmap::fromImage(disImage));//显示图像
}

void MainWindow::InitVideo()
{
    m_pVideo = new VideoCapture("test.mp4");

}

void MainWindow::on_play_clicked()
{
    m_pTimer->start();
    ui->play->setEnabled(false);
    ui->stop->setEnabled(true);

}

void MainWindow::on_stop_clicked()
{
    ui->play->setEnabled(true);
    ui->stop->setEnabled(false);

    m_pTimer->stop();
}


控件

用于测试,界面比较简单,中间是一个QLabel,下面两个按键用于控制播放。


运行结果


录屏工具效果不太好,实际上是很清晰的。

目录
相关文章
|
2天前
|
Windows
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
2天前
|
数据安全/隐私保护 图形学
Qt 输入组控件(Input Widgets)& 显示组控件(Display Widgets)详解
Qt 输入组控件(Input Widgets)& 显示组控件(Display Widgets)详解
|
2天前
|
API 容器
Qt中常用容器组控件介绍和实操-2
Qt中常用容器组控件介绍和实操
|
2天前
|
容器 内存技术
Qt中常用容器组控件介绍和实操-1
Qt中常用容器组控件介绍和实操
|
2天前
|
图形学 C++ 容器
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
|
2天前
|
XML 数据可视化 程序员
Qt 中的项目文件解析和命名规范
Qt 中的项目文件解析和命名规范
|
2天前
|
开发框架 数据可视化 前端开发
【Qt 学习笔记】Qt控件概述
【Qt 学习笔记】Qt控件概述
27 0
|
2天前
|
图形学 Python 容器
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
56 0

推荐镜像

更多