Windows下让Qt5 QCamera响应UVC摄像头硬件按钮拍图
QCamera相机类提供了一些基本的功能,包括拍照和录制功能(Windows不支持录制视频),但也有很多接口是没有封装的,比如有些UVC摄像头有物理按键,可以进行拍图等操作,但是QCamera没法响应硬件按钮的拍图操作。
网络上的相关代码都是直接封装平台库(如Windows的DirectShow,Linux的V4L2)来支持硬件按钮,比如我之前参考的一些:
https://www.jianshu.com/p/a67b8cfc57c5
https://gitee.com/fsfzp888/UVCCapture/
https://github.com/GoodRon/QtWebcam
https://github.com/liuleidong/UVCCaptureDemo
但是自己封装出来的效果不是太好,总有一些奇怪的BUG。后来查看Qt5文档和源码,QCamera在Windows平台也是封装的DirectShow,代码路径:
Qt\qt-everywhere-src-5.15.2\qtmultimedia\src\plugins\directshow
既然如此,想让QCamera响应硬件按钮的拍图操作,只需要修改下directshow这个插件即可,而其他的视频渲染等功能就不用自己封装了。视频预览和拍图的接口是差不多的,只需要把预览的接口复制粘贴一份稍加修改。(如果要扩展其他功能,也是直接修改相关源码即可)
先在directshowcameraglobal.h加一个GUID声明PIN_CATEGORY_STILL(因为文本不好标注哪些是新增的,所以用的截图,图中红色为新增代码):
在dscamerasession.h和cpp代码里搜m_previewSampleGrabber和m_nullRendererFilter,然后复制粘贴修改一份。有一点不同的就是,预览的接口如果操作失败是直接返回false,但是硬件拍图我们不能直接返回,因为有的相机本身就没对应的接口,直接跳过就好了。
dscamerasession.h:
dscamerasession.cpp:
DirectShowSampleGrabber::bufferAvailable信号表示有数据来了,连接该信号进行处理,然后使用imageCaptured将图片信号发送出去即可。我这里偷懒发的空图,然后在主程序里判断是否为空再主动触发一次拍图。
if (!m_stillSampleGrabber) {m_stillSampleGrabber = new DirectShowSampleGrabber(this);connect(m_stillSampleGrabber, &DirectShowSampleGrabber::bufferAvailable,this, [this](){qDebug()<<"Still capture bufferAvailable";emit imageCaptured(-1, QImage());});}
void UVCCamera::onImageCaptured(int id, const QImage &preview)
{//判断是否是我们在plugins里触发的if (preview.isNull()) {if (id == -1)capture(); //主动拍图return;}//... ...
}
Windows下让Qt5 QCamera响应UVC摄像头硬件按钮拍图相关推荐
- Windows下 QT 使用directdshow对UVC摄像头控制
QT使用QCamera配合QCameraViewfinder就可以显示UVC摄像头图像 (详细看QT示例,搜索camera) 如果需要UVC原始数据就使用QVideoProbe 但是QT没有做对UVC ...
- windows下opencv同时开启两个摄像头采集程序
亲测可用的代码,至于为什么把 VideoCapture cap(1);//写成全局变量,方便写其他C程序 VideoCapture capcap(2); Mat frame; Mat frame2; ...
- Windows下的QT系统开发环境搭建
QT是一款由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊 ...
- 简明Hadoop配置(3)——windows下eclipse连接虚拟机
在windows下配置,还需要当心IP地址和eclipse配置时的问题,这需要单独说一下. 在Ubuntu下eclipse新建hadoopIP直接填localhost就好,但是在windows下肯定是 ...
- Windows下虚拟UVC摄像头开发演示
最近在windows10 x64下开发了一个USB虚拟总线驱动,该驱动可接收上位机的指令动态创建或卸载UVC摄像头. UVC摄像头的数据通过上位机下发给驱动,驱动再给视频播放软件,这样就可以实现视频的 ...
- windows下给定多个openNi的Uri,匹配与uri对应的Uvc RGB设备
1.问题描述: 在瀚维医疗项目中,客户给定两台deeyea(OpenNi+Uvc)设备,在windows平台下分别固定在不同的usb端口上,同时给定了两个设备的uri,默认给定的第一个设备的uri为左 ...
- 乐视三合一体感摄像头--基本信息及windows下部分开发
乐视三合一体感摄像头--基本信息及windows下部分开发 Introduction 基本信息 Windows下使用 安装驱动 使用openNI 使用imageJ 调用RGB图像 Q: 参考资料 In ...
- windows访问uvc摄像头扩展单元api库分享
分享一个自己封装的windows通过dshow接口访问uvc扩展单元的dll库,采用vs2017编译,分别编译了x86,x64的debug和release版本,可直接调用,api调用方法如下: (1) ...
- linux系统USB摄像头反应慢,Linux下OpenCV打开USB接口的UVC摄像头及索引号是202的原因...
一般来说,USB的UVC摄像头在Linux平台下通过V4L驱动来使用.OpenCV打开USB的UVC摄像头一般也通过V4L驱动来打开.打开方法网上都有,一般就是通过VideoCapture的open( ...
最新文章
- Nature综述:噬菌体的百年研究
- 戴尔t410支持哪些服务器系统,DELL服务器T410
- 【Trie】bzoj1212 [HNOI2004]L语言
- 数据库原理及应用【六】数据库设计
- c语言作业系统输出超限,C语言网Online Judge系统支持语言和编译说明
- linux系统grep用法,Linux系统中怎么使用grep命令?
- apache php mysql环境搭建_Ubuntu+Apache+PHP+Mysql环境搭建(完整版)
- java正则表达式获得html字符串中图片的url地址
- 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
- 解决办法:GLib-ERROR **: Creating pipes for GWakeup: Too many open files
- 向量叉乘的几何意义及其模的计算
- DID 去中心化数字身份
- OpenCV+Mediapipe人物动作捕捉与Unity引擎的结合
- 2021年过了大半了,脑机接口取得哪些进展?
- 精彩回顾|展会圆满收官,落幕不散场,期待与您的再次相遇,下一站上海!
- 7-2 统计英文字母和数字字符[2]
- C语言求任意数的阶层
- 【单片机】汇编指令入门学习|单片机启动代码汇编
- WebRTC基础实践 - 10. 总结
- 【速览】2021年全球及中国培育钻石行业发展现状及未来发展趋势分析[图]
热门文章
- java计算机毕业设计服装定制管理系统源码+mysql数据库+系统+lw文档+部署
- 医院计算机操作权限管理制度,医院信息安全管理制度_医院信息安全管理制度办法...
- 宽带离网用户分析(5) Lasso和Group Lasso
- Vue+Element-UI 使用 Vform 表单设计器
- RescoPhotoViewer图片查看v5.0_s60v3破解汉化版by八神
- Instrusive 【HDU - 5040】【2014 北京 BFS】
- 什么是机器人的五点校正法_机器人20点法校准和6点法区别
- 老电工教你快速学会如何看懂电气控制电路图
- Primavera Unifier 自定义报表制作及打印分享
- 很有用的PHP笔试题系列二