QT中VideoProbe的简介和实现

简介: 一、遇到问题       在Android机上使用QT进行图像处理程序设计的时候,遇到的一个比较明显的问题就是图片采集的问题----摄像头获得是实时的视频,如果我们想从中动态地截获图片,并且转换成Mat的格式,那么仅仅是静态的imagecapturee就无法完成,必须要依靠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的代码:
img_708a41f7d0c7e870100d1933269a7fce.png
在qml中生成camera和probe对象。这个probe对象是对原始QVideoProbe的重新封装,原始的QVideoProbe在
img_bc4cc18d6c1c2277c10eb6a67fc026d5.png
看的更清楚一些
img_2fc816b3502394d8a7727cb291f16894.png

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

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





目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
C++ 索引
1.2 Qt Creator简介
1.2 Qt Creator简介
1.2 Qt Creator简介
|
开发框架 数据可视化 Java
Python Qt GUI设计简介、环境下载和安装(基础篇—1)
Python Qt GUI设计简介、环境下载和安装(基础篇—1)
Python Qt GUI设计简介、环境下载和安装(基础篇—1)
|
XML SQL JavaScript
QT开发(一)——QT简介
  一、QT简介   1、QT简介   QT是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt Creator, QtEmbedded,Qt Designer快速开发工具,Qt Linguist国际化工具等部分,Qt支持所有Linux/Unix系统,还支持Windows平台。   2、QT优点   Qt是一个跨平台的C++图形用户界面应用程序框架,提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt很容易扩展,并且允许真正地组件编程。Qt与GTK、KDE、MFC,OWL,VCL,ATL是一样的图形界面库。
1807 1
|
开发工具 Android开发 开发者
Qt Design Studio简介及源码下载
Qt Design Studio简介及源码下载
1420 0
Qt Design Studio简介及源码下载
|
Linux 定位技术 开发工具
一起谈.NET技术,Qt简介以及如何配置Qt使用VS2010进行开发
  Qt是神马东西?   Qt – 一个跨平台应用程序和UI开发框架   它包括跨平台类库、集成开发工具和跨平台 IDE。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
1852 0
|
Linux 定位技术 开发工具
Qt简介以“.NET研究”及如何配置Qt使用VS2010进行开发
  Qt是神马东西?   Qt – 一个跨平台应用程序和UI开发框架   它包括跨平台类库、集成开发工具和跨平台 IDE。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
1106 0

推荐镜像

更多
下一篇
无影云桌面