QT5 QCamera摄像头

2023-07-28 21:25:21


前言

本篇文章我们来讲解QT如何使用通过QCamera调用摄像头。
本篇文章的话就围绕QT5来展开讲解,QT6的话已经更新了多媒体的调用方式,这里我们以后再进行讲解。

一、QCamera类

QCamera类是Qt框架提供的用于访问和控制摄像头设备的类。它提供了一组函数和信号槽,使开发人员能够以编程方式访问摄像头设备并执行各种操作,例如捕捉照片、录制视频、调整摄像头参数等。

以下是一些QCamera类的常用函数和用法:

1.构造函数和析构函数:

QCamera(QObject* parent = nullptr):构造一个QCamera对象。可选参数parent指定了父对象,默认为nullptr。
~QCamera():析构函数,用于释放QCamera对象。

2.摄像头控制:

void setCaptureMode(QCamera::CaptureModes mode):设置摄像头的捕捉模式,可以是照片模式、视频模式或同时支持两种模式。
bool start():打开摄像头设备并开始捕捉视频帧或图像。
bool stop():停止捕捉视频或图像,并关闭摄像头设备。
void searchAndLock():搜索当前系统上可用的摄像头设备,并锁定所选设备。

3.预览窗口和视图控制:

void setViewfinder(QAbstractVideoSurface* surface):将预览窗口设置为指定的视频表面(QAbstractVideoSurface对象)。
void setViewfinder(QWidget* widget):将预览窗口设置为指定的QWidget对象。
void setViewfinderSettings(const QCameraViewfinderSettings& settings):设置预览窗口的参数,例如分辨率、帧率等。

4.拍照和录制视频:
void searchAndCapture():搜索并捕捉一帧图像。
void capture():捕捉当前预览窗口中的一帧图像。
void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination):设置图像捕捉的目标位置,可以是文件、内存或其他自定义目标。
void record():开始录制视频。
void stopRecording():停止录制视频。

二、QCameraViewfinder类

QCameraViewfinder 是 Qt 中用于显示摄像头实时预览的类。它是 QCamera 类的一部分,用于在应用程序中创建一个摄像头视图窗口,以显示摄像头捕获的实时视频流。

QCameraViewfinder 继承自 QWidget 类,因此可以像其他 Qt 控件一样使用并集成到应用程序的用户界面中。它提供了一个可视化的界面,用于展示通过摄像头设备捕获的视频内容。

一些重要的 QCameraViewfinder 类的功能和特性包括:

1.实时预览: QCameraViewfinder 可以实时显示摄像头设备捕获的视频流。它通过调用 QCamera 的 setViewfinder() 方法将摄像头与视图绑定,从而将摄像头的实时图像显示在 QCameraViewfinder 上。

2.尺寸和缩放: QCameraViewfinder 可以根据窗口的大小自动调整摄像头预览的尺寸。它可以根据视图的宽高比例对视频流进行缩放,以确保画面的比例和容纳。

3.事件处理: QCameraViewfinder 可以处理鼠标和键盘事件,以及其他与用户交互相关的事件。您可以通过重写相应的事件处理函数来实现自定义行为。

4.窗口样式: QCameraViewfinder 被设计为可自定义样式,可以通过使用 QSS (Qt 样式表) 或其他 UI 风格技术来改变其外观和样式。

5.使用 QCameraViewfinder,您可以轻松地在 Qt 应用程序中创建一个具有实时摄像头预览功能的界面。您可以处理摄像头的属性设置、捕获和显示视频流等操作,实现自定义的多媒体应用程序,如视频监控、视频通话等。

三、QCameraInfo类

QCameraInfo 是 Qt 中用于获取有关系统中可用摄像头设备信息的类。它提供了一种简便的方式来检索和操作与摄像头相关的信息,包括设备名称、位置、支持的功能和参数等。

以下是 QCameraInfo 类的一些重要特性和功能:

1.获取可用的摄像头设备列表:您可以使用 QCameraInfo::availableCameras() 静态函数获取系统中可用的摄像头设备列表。该函数返回一个包含 QCameraInfo 对象的列表,每个对象代表一个可用的摄像头设备。

2.检索摄像头设备的属性:通过 QCameraInfo 对象,您可以获取有关摄像头设备的属性信息。例如,您可以使用 deviceName() 方法获取设备的名称,manufacturer() 方法获取设备的制造商信息,position() 方法获取设备的位置(前置摄像头或后置摄像头),还可以使用 description() 方法获取有关设备的描述信息。

3.查询摄像头设备支持的功能:QCameraInfo 提供了函数来查询摄像头设备支持的功能和参数。您可以使用 QCameraInfo::isCaptureModeSupported() 来检查设备是否支持拍照模式,使用 QCameraInfo::availableMimeTypes() 来获取设备支持的视频和图片编码格式等。

4.监测可用摄像头设备的变化:QCameraInfo 提供了信号和槽机制,可以用于监测可用摄像头设备的变化。通过使用 QCameraInfo::availableCamerasChanged() 信号,您可以在设备列表发生变化时接收通知,从而更新应用程序的界面或相关逻辑。

四、QCameraImageCapture类

QCameraImageCapture 类是 Qt 框架中用于捕获摄像头图像的类。它提供了一种方便的方式来拍摄照片或捕获图像帧,并提供了许多功能和信号用于处理捕获过程和结果。

以下是 QCameraImageCapture 类的一些重要功能和用法:

1.捕获图像:使用 capture() 函数可以捕获当前摄像头的图像。你可以在捕获前设置图像保存的格式、保存路径和文件名等参数。捕获完成后,可以通过 imageSaved() 信号获取捕获的图像数据。

2.设置图像保存参数:使用 setCaptureDestination() 函数可以设置图像的保存目标,可以选择保存为文件或存储在内存中。还可以使用 setEncodingSettings() 函数设置图像的编码格式和质量选项。

3.获取支持的图像编码格式和质量选项:使用 supportedImageCodecs() 函数可以获取当前系统支持的图像编码格式列表。使用 supportedResolutions() 函数可以获取摄像头支持的图像分辨率列表。

4.自动对焦和闪光灯控制:通过 isCaptureDestinationSupported() 和 isFeatureSupported() 函数可以检查是否支持自动对焦和闪光灯功能,并相应地进行设置。

5.异步捕获和信号处理:QCameraImageCapture 支持异步捕获,捕获图像时不会阻塞主线程。捕获完成后,可以通过 imageSaved() 信号获取捕获的图像数据,并进行进一步的处理。

总结

本篇文章主要讲解一下摄像头相关的类,那么下篇文章我们继续讲解并且进行实战。

更多推荐

阿里测开面试大全(一)附答案完整版

万字长文,建议收藏1什么是POM,为什么要使用它?POM是PageObjectModel的简称,它是一种设计思想,而不是框架。大概的意思是,把一个一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,所以自然而然就用了类的思想来组织我们的页面。一般一个页面写一个类文件,这个类文件包含该页面的元素

【Git】Git 变基(rebase)以及rebase和merge之间的区别

Git变基1.变基—rebase在Git中整合来自不同分支的修改主要有两种方法:merge以及rebase。在前面的文章中已经介绍了merge,这里我们来学习另一个指令rebase。变基的基本操作回顾之前在分支的合并中的一个例子,在该例子中,我们可以看到开发任务分叉到两个不同分支,又各自提交了更新。之前介绍过,整合分支

行为树的基本概念和C++库

一说明行为树是计算机科学、机器人技术、控制系统和视频游戏中使用的计划执行的数学模型。它们以模块化方式描述一组有限任务之间的切换。他们的优势来自于他们能够创建由简单任务组成的非常复杂的任务,而不用担心简单任务是如何实现的。行为树与分层状​​态机有一些相似之处关键区别在于行为的主要构建块是任务而不是状态。它易于人类理解,使

服务器中了勒索病毒怎么办?勒索病毒解密,数据恢复

勒索病毒是一种比较常见的电脑病毒,它们给企业的生产经营和发展带来了很大的影响。可是绝大多数企业在这方面并没有做合理的预案,这也导致当安全运维人员或者企业主发现中了勒索病毒以后手足无措。那云天数据恢复中心就用这篇文章来告诉大家当服务器中了勒索病毒怎么办。一,隔离受感染的电脑或者系统为了生产经营方便,很多用户的服务器或者电

七夕特别篇 | 浪漫的Bug

文章目录前言一、迷失的爱情漩涡(多线程中的错误同步)1.1Bug背景1.2Bug分析1.3Bug解决二、心形积分之恋(心形面积计算中的数值积分误差)1.1Bug背景1.1.1背景1.1.2数学模型1.2Bug分析1.2.1初始代码1.2.2代码工作流程图1.2.3代码分析1.3Bug解决三、总结Bug1:多线程环境中的

【已解决】matrix contains invalid numeric entries,记录bug修改

文章目录摘要原因解决办法图像分类网络AlexNetVGGNetGooLeNet系列ResNetDenseNetSwinTransformerMAECoAtNetConvNeXtV1、V2MobileNet系列MPViTVITSWAEfficientNet系列MOBILEVITEdgeViTsMixConvRepLKNe

绘图系统四:定制绘图风格

文章目录创建控件绘图风格可定制绘图风格的绘图系统代码组织📈一三维绘图系统📈二多图绘制系统📈三坐标轴定制源码地址Python打造动态绘图系统创建控件尽管从matplotlib的角度来说,绘图风格也算是图像类型的一部分,但诸如点线字体标题等内容太过复杂,为了减轻DrawType的负担,所以新建一个组件。有了DrawT

R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据...

全文链接:http://tecdat.cn/?p=24456如果你正在进行统计分析:想要加一些先验信息,最终你想要的是预测。所以你决定使用贝叶斯(点击文末“阅读原文”获取完整代码数据)。相关视频但是,你没有共轭先验。你可能会花费很长时间编写Metropolis-Hastings代码,优化接受率和提议分布,或者你可以使用

【医学影像数据处理】 Dicom 文件格式处理汇总

在医学影像的数据存储领域,是存在一定的行业标准的。X光、CT机器等等医疗器械等生产企业,会依据行业标准,对采集的数据进行规范化的存储。这里面就包括了大名鼎鼎的DICOM3.0协议,上述的摄影形式大部分也都是以这种形式进行存储和传播的。但是呢,在医学领域进行数据处理的时候,经常会遇到除DICOM外其他的数据形式,比如常见

gateway之断言的使用详解

文章目录gateway产生的背景,为什么要是用gateway什么是网关gateway带来的好处功能特征gateway在项目中使用的依赖什么是断言断言分类内置自定义示例断言和过滤器的不同gateway产生的背景,为什么要是用gateway一个系统会被拆分为多个微服务,作为客户端要如何去调用这么多的微服务?如果没有网关的存

使用 Amazon EC2 预留实例最大限度地节省成本和提高灵活性

简介:随着云计算不断改变企业的运营方式,优化成本已成为首要任务。利用AmazonEC2预留实例是实现云端成本节约最有效的方法之一。本文将探讨什么是AmazonEC2预留实例,它与按需实例的区别,以及它在成本节约和灵活性方面提供的好处。背景:云计算改变了IT格局,使企业能够按需扩展基础设施,仅为所消耗的资源付费。但是,随

热文推荐