一、遇到问题

       在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结合起来,用于图像采集处理。
来自为知笔记(Wiz)

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

QT中VideoProbe的简介和实现相关推荐

  1. Qt中rcc工具简介

    Qt 自带的开发工具集里有专门的 rcc 工具,用于将 *.qrc 里面描述的图片.文档等编译成对应的源代码文件 qrc_*.cpp 或者独立的二进制资源文件 *.rcc.下面介绍 rcc 工具的两种 ...

  2. Qt中的QMainWindow

    文章目录 1 Qt中的QMainWindow简介 1.1 应用程序中的主窗口 1.2 QMainWindow 2 QMainWindow中的菜单栏 3 QMainWindow中的工具栏 4 QMain ...

  3. 【Qt】Qt中JSON简介

    00. 目录 文章目录 00. 目录 01. JSON简介 02. JSON Support in Qt 03. JSON类 04. 附录 01. JSON简介 1.1 JSON概述 JSON(Jav ...

  4. Qt中关于 QAbstractButton与QButtonGroup简介

    一.在Qt中,我们使用按钮,有四种按钮供我们选择.如下图所示: PushButton: 点击式的命令按钮 RadioButton: 单选按钮,单选按钮会对同一个布局中的其它按钮增加互斥性. Check ...

  5. Qt中TCP服务端编程

    文章目录 1 Qt中的TCP服务端编程 1.1 TCP服务端编程介绍 1.2 Qt中的TCP服务端编程 1 Qt中的TCP服务端编程 1.1 TCP服务端编程介绍 网络中的服务端: 服务端是为客户端服 ...

  6. Qt中应用程序的打包与发布

    文章目录 1 Qt中应用程序的打包与发布 1.1 调试与发布 1.2 程序的库依赖 1.3 部署程序的开发 1 Qt中应用程序的打包与发布 1.1 调试与发布 发布应用程序时的候选者: 调试版(deb ...

  7. Qt中的QRadioButton

    文章目录 1 Qt中的QRadioButton 1.1 QRadioButton简介 1.2 QRadioButton测试 1 Qt中的QRadioButton 1.1 QRadioButton简介 ...

  8. Qt中的QDialog

    文章目录 1 Qt中的QDialog 1.1 QDialog简介 1.2 模态对话框和非模态对话框 1.3 对话框的返回值 2 登陆对话框实例分析 2.1 分析 2.2 代码实现 2.3 登录对话框的 ...

  9. Qt中的QLineEdit、QTextEdit、QPlainTextEdit

    文章目录 1 Qt中的文本编辑组件 2 QLineEdit组件 2.1 QLineEdit组件简介 2.2 QLineEdit常用方法 1 Qt中的文本编辑组件 Qt中支持3种常用的文本编辑组件: Q ...

最新文章

  1. spring boot入门:@SpringBootApplication
  2. Netty消息接收类故障案例分析
  3. hiberanate 主键查询慢_mysql查询优化,1万条数据居然要30秒
  4. 【Kattis - triangle 】Sierpiński Circumference(数学,求位数,取对数或Java)
  5. ReactNative设置字体不随系统字体大小变化
  6. newifi3高恪魔改最新_12.08达达最新球球id账号呆瓜表
  7. 计算机二级C语言题库
  8. 编译原理第三版课后习题
  9. jeecgboot设置session失效时间
  10. sql注入的闭合方式
  11. 电脑如设置路由器WiFi外加无线桥接一个副路由器
  12. 第四章 春夏秋冬,二十四节气
  13. centos7 linux重置密码
  14. vue中加载maptalks图标(markers)以及点击事件
  15. java判断某个日期是当年内第几周
  16. 码农的自我修养 - 流程图 Flowchart
  17. 数字中国建设峰会闭幕,现场海量图片一览!
  18. 七层/四层网络模型对应协议
  19. 利用JS实现的网页赛车小游戏
  20. DVWA 之 XSS(Reflected)反射型XSS

热门文章

  1. 同时获取同一等级下多个class值的节点的方法
  2. react动画库_React 2020动画库
  3. lottie 动画_使用After Effects和Lottie制作网络动画而不会损失质量
  4. SEE Conf: Umi 4 设计思路文字稿
  5. 我是如何零基础入门前端开发的(2021 版)
  6. 元璟资本陈洪亮解析人货场融合 消费者变成“合作者”
  7. cocos2d-js 热更新具体解释(一)
  8. 10.python网络编程(socket server 实现并发 part 2)
  9. css案例学习之span边框实现的特殊效果
  10. TMG学习(十一),保护企业内网上网安全