项目实战:Qt+OpenCV视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)

简介: 项目实战:Qt+OpenCV视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)

OpenCV开发专栏(点击传送门)

需求

使用OpenCV库的视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)。

原理

      使用OpenCV打开视频文件,获取总帧数,根据当前帧数,刷新当前时间戳与预期的时间间隔,调用槽函数动态刷新播放内容。

注意

      当前只测试了avi文件。

相关博客

OpenCV开发笔记(四):OpenCV图片和视频数据的读取与存储

项目实战:Qt视频播放器控件(不依赖系统编解码)

项目实战:Qt+OpenCV操作摄像头拍照、调节参数和视频录制

项目实战:Qt+OpenCV视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)

Qt实用技巧:使用QMediaPlayer和Windows自带组件播放swf、rmvb、mpg、mp4等视频文件

Qt实用技巧:使用QMediaPlayer播放mp4文件

Demo:OpenCVPlayer v1.0.0

运行效果

下载地址

CSDN:openCVPlayerv1.0.0.rar_qt中OpenCV中视频播放、暂停-QT其他资源-CSDN下载

核心类代码

OpenCVPlayerManager.h

#ifndef OPENCVPLAYERMANAGER_H
#define OPENCVPLAYERMANAGER_H
/************************************************************\
 * 控件名称: OpenCVPlayerManager,OpenCV管理类
 * 控件描述:
 *          1.OpenCV打开视频文件
 *          2.播放器操作:播放、暂停、停止
 *          3.播放时显示:当前时间、总时间
 *          4.设置当前播放的时间点
 *
 * 作者:红模仿    联系方式:QQ21497936
 * 博客地址:https://blog.csdn.net/qq21497936
 *       日期                版本               描述
 *   2019年11月25日      v1.0.0         opencv打开文件
\************************************************************/
#include <QObject>
#include <QImage>
#include <QTimer>
#include <QElapsedTimer>
// opencv
#include "opencv/highgui.h"
#include "opencv/cxcore.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"
class OpenCVPlayerManager : public QObject
{
    Q_OBJECT
public:
    enum PLAY_STATE {
        PLAY_STATE_PLAYING,
        PLAY_STATE_PAUSE,
        PLAY_STATE_STOP
    };
public:
    explicit OpenCVPlayerManager(QObject *parent = 0);
    ~OpenCVPlayerManager();
public:
    QString getWindowTitle() const;
public:
    void setWindowTitle(const QString &windowTitle);
signals:
    void signal_captureOneFrame(cv::Mat mat);           // 接收图像后抛出信号
    void signal_playStateChanged(OpenCVPlayerManager::PLAY_STATE playState);
                                                        // 播放器状态
    void signal_durationChanged(qint64 duration);       // 视频总长度
    void signal_positionChanged(qint64 position);       // 当前位置
public:
    bool startPlay(QString filePath, int width = 480, int height = 320);
    void pause();                       // 暂停
    void resume();                      // 恢复播放
    void stopPlay();                    // 停止播放
    void setPosition(qint64 position);  // 切换到播放位置
public slots:
    bool slot_start();                  // 开启线程
    bool stop();                        // 关闭线程
protected slots:
    void slot_captrueFrame();           // 消息循环获取图像
    void slot_stopPlay();               // 停止播放
    void slot_setPosition(qint64 position);
public:
    static QImage cvMat2QImage(const cv::Mat &mat);
private:
    cv::VideoCapture *_pVideoCapture;   // 播放文件实例
    QString _filePath;                  // 播放文件路径
    bool _running;                      // 线程是否运行
    int _totalFrames;                   // 总帧数
    int _fps;                           // 每秒帧数
    int _currentFrame;                  // 当前帧数
    int _width;                         // 高度
    int _height;                        // 宽度
    QElapsedTimer _elapsedTimer;        // 计时器
    qint64 _pauseMs;                    // 暂停的毫秒
    qint64 _duration;                   // 视频总长度(毫秒)
    PLAY_STATE _playState;              // 播放器状态
    int _position;                      // 改变到的播放位置
    bool _setPostion;                   // 播放位置修改标志
private:
    QString _windowTitle;
};
#endif // OPENCVPLAYERMANAGER_

入坑

入坑一:调整播放位置时,宕机

原因:

      直接主线程操作设置当前帧的位置,同时子线程也却在读取,OpenCV内部没有错异步处理。

解决方法:

      先调用设置位置,然后槽调用,将设置位置放置到子线程当中去。


相关文章
|
1月前
|
计算机视觉 数据格式
使用opencv在Qt控件上播放mp4文件
使用opencv在Qt控件上播放mp4文件
34 2
|
4月前
|
机器学习/深度学习 API 计算机视觉
Qt5 和 OpenCV4 计算机视觉项目:6~9
Qt5 和 OpenCV4 计算机视觉项目:6~9
106 0
|
5月前
|
计算机视觉 Python
OpenCV膨胀操作讲解及将图像加工成近视眼效果实战(附Python源码)
OpenCV膨胀操作讲解及将图像加工成近视眼效果实战(附Python源码)
32 0
|
4月前
|
机器学习/深度学习 存储 文字识别
Qt5 和 OpenCV4 计算机视觉项目:1~5(5)
Qt5 和 OpenCV4 计算机视觉项目:1~5(5)
47 0
|
4月前
|
计算机视觉
OpenCV3 和 Qt5 计算机视觉:1~5
OpenCV3 和 Qt5 计算机视觉:1~5
33 0
|
4月前
|
存储 Linux 计算机视觉
Qt5 和 OpenCV4 计算机视觉项目:1~5(1)
Qt5 和 OpenCV4 计算机视觉项目:1~5(1)
61 0
|
4月前
|
计算机视觉 Python 索引
【Python Opencv】图片与视频的操作
【Python Opencv】图片与视频的操作
【Python Opencv】图片与视频的操作
|
2月前
|
机器学习/深度学习 API vr&ar
Qt, OpenCV与OpenGL协同作战:图像处理与三维图形界面的完美结合
Qt, OpenCV与OpenGL协同作战:图像处理与三维图形界面的完美结合
144 4
|
3月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.7、实现OpenCV自带的七种形态学转换操作
OpenCV这么简单为啥不学——1.7、实现OpenCV自带的七种形态学转换操作
32 0
|
4月前
|
机器学习/深度学习 算法 小程序
Qt5 和 OpenCV4 计算机视觉项目:1~5(4)
Qt5 和 OpenCV4 计算机视觉项目:1~5(4)
64 0

推荐镜像

更多