zoukankan      html  css  js  c++  java
  • QT中VideoProbe的简介和实现

    一、遇到问题
           在Android机上使用QT进行图像处理程序设计的时候,遇到的一个比较明显的问题就是图片采集的问题----摄像头获得是实时的视频,如果我们想从中动态地截获图片,并且转换成Mat的格式,那么仅仅是静态的imagecapturee就无法完成,必须要依靠VideoProbe机制。
    二、基本情况
    我们参考QT的相关文档:
    QVideoProbe class允许你监控正在播放或者记录的视频
    它的头文件
    #include <QVideoProbe>
    qmake:    QT += multimedia
    Inherits:    QObject
    成员函数
    Public Functions
        QVideoProbe(QObject *parent = Q_NULLPTR)
        ~QVideoProbe()
    bool     isActive() const
    bool     setSource(QMediaObject *source)
    bool     setSource(QMediaRecorder *mediaRecorder)

    可以发出两个信号,其中比较重要的是后面一个videoFrameProbed
    void     flush()
    void     videoFrameProbed(const QVideoFrame &frame)

      基本例子,比如打开视频:

    QMediaPlayer *player = new QMediaPlayer();
    QVideoProbe *probe = new QVideoProbe;
    connect(probe, SIGNAL(videoFrameProbed(QVideoFrame)), this, SLOT(processFrame(QVideoFrame)));
    probe->setSource(player); // Returns true, hopefully.
    player->setVideoOutput(myVideoSurface);
    player->setMedia(QUrl::fromLocalFile("observation.mp4"));
    player->play(); // Start receiving frames as they get presented to myVideoSurface

    同样可以打开QCamera

    三、编写代码
    它的主要结构(流程)是这样的,我们创建QMl的代码:
    在qml中生成camera和probe对象。这个probe对象是对原始QVideoProbe的重新封装,原始的QVideoProbe在
    看的更清楚一些

    probe对象中,首先通过调用摄像头,将videoframeprobed信号和processframe槽对应起来。这样一旦有视频probed则自动触发processframe。
    注意在这行代码中
    _camera = qvariant_cast<QCamera*>(_qmlCamera->property("mediaObject"));
    是c++调用qml对象的方法,是将qmlcamera强转为qcamera的一句
    videoFrameProbed是自动触发的信号,其结果将被processFrame截获并处理。信号和槽的方式是可以直接带变量传递的。
    在process中,最主要的步骤就是QVideoFrame格式和Mat格式的转换。这个目前还没有非常好的方法,只能在NoHandle模式下进行灰度处理。但是对于图像处理来说已经能够解决一些问题。需要注意的是,最后采集的结果,通过
    也就是
    的模式将其直接推送到qml这里

    四、小结
    probe这种模式还是比较简单的,而且经过封装后能够很好地和OpenCV结合起来,用于图像采集处理。





  • 相关阅读:
    JQuery制作网页——第五章 初识 jQuery
    JQuery制作网页—— 第四章JavaScript对象及初识面向对象
    JQuery制作网页—— 第三章 JavaScript操作DOM对象
    JQuery制作网页—— 第二章 JavaScript操作BOM对象
    JQuery制作网页—— 第一章 JavaScript基础
    JAVA / MySql 编程——第八章 DAO 模式
    JAVA / MySql 编程——第七章 JDBC
    JAVA / MySql 编程——第六章 Mysql 创建账户的相关命令
    JAVA / MySql 编程——第五章 事务、视图、索引、备份和恢复
    JAVA / MySql 编程—— 第四章 高级查询(二)
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/8447327.html
Copyright © 2011-2022 走看看