QT中摄像头的使用

QT中摄像头相关类

摄像头的使用

QT中摄像头的使用主要分为三个方面,显示画面抓取图片视频录制。这三个方面对应着摄像模块的三种模式。模式如下:

Constant Value Description
QCamera::CaptureViewfinder 0 相机仅配置为显示取景器。
QCamera::CaptureStillImage 0x01 相机已配置为静态帧捕获
QCamera::CaptureVideo 0x02 相机已配置为用于视频捕获。

这三种模式都是基于QCamera对象的。在QCamera之前的操作都是一样的,例如获取设备中的摄像头等。

QT中摄像头的取景器模式,个人理解取景器模式就是单纯的将摄像机额画面显示到界面中。这个实现很简单只需要两个步骤。

1、获取系统中的摄像头设备,这里使用QCameraInfo 中的函数availableCameras函数,此函数返回的是一个设备列表。

2、使用QCamera打开摄像头,并将其添加到要显示的窗口即可,这里需要注意显示摄像头的窗口为QCameraViewfinder窗口,可以将QWidget提升为QCameraViewfinder。

代码如下:

c++ 复制代码
QList<QCameraInfo>  camerainfos  = QCameraInfo::availableCameras();//获取系统中摄像头
foreach (QCameraInfo info, camerainfos) { //通过遍历摄像头列表,将器添加到下拉控件中
    ui->comboBox->addItem(info.deviceName());
}
.....
camera = new QCamera(ui->comboBox->currentText().toUtf8());//选在摄像头设备,并构造QCamera对象。
camera->setViewfinder(ui->widget); //设置摄像头的显示窗体
camera->start();//启动摄像,到这里界面就可以看到摄像头中的画面了
.....
camera->stop();//停止摄像,摄像头画面将会暂停

但是在取景器模式中我们可以有两个设置可以进行画面的调整,一个是设置显示窗口可以设置显示界面的亮度、对比度、是否全屏显示、色调、饱和度等都可以通过QCameraViewfinder的函数进行调整。另一个是设置QCamera取景器的配置,包括(设置最大帧率、设置最小帧率、设置像素长宽比、设置像素格式等)。QCamera还可以设置曝光和聚焦,通过QCameraExposure和QCameraFocus。

摄像头的使用首先是肯定是显示画面,但是除了显示画面我们可能还需要保存视频和从视频中获取图片。

QT中在视频中抓取图片的步骤:抓取图片的时候需要使用都QCameraImageCapture

1、创建QCameraImageCapture对象,传入的参数为QCamera。

2、设置相机模式为拍照模式 m_camera->setCaptureMode(QCamera::CaptureStillImage);

3、QCameraImageCapture对象调用capture函数进行图片的保存,传入参数为保存路径。

代码如下:

c++ 复制代码
    QString path = QFileDialog::getSaveFileName(nullptr, "保存图片",
                                                nullptr, "*.jpg");
    if(m_imageCapture == nullptr){
         m_imageCapture = new QCameraImageCapture(m_camera);
    }
    //设置为拍照模式
    m_camera->setCaptureMode(QCamera::CaptureStillImage);
    //对相机锁定(异步操作)
    m_camera->searchAndLock();
    //拍照并且把照片保存到这个路径中
    m_imageCapture->capture(path);
    //解锁
    m_camera->unlock();

	//需要注意的是QCamera已经初始化配置过摄像头了

在拍照模式的时候保存的图片可以设置相关参数,出去QCamera设置的参数,图片的参数通过QCameraImageCapture类的setEncodingSettings函数设置,参数包括(图像质量、分辨率、编码器、编码等)。

QT在window中不能进行摄像头视频的保存,因此这里不多说,

相关推荐
Ro Jace10 分钟前
计算机专业基础教材
java·开发语言
代码游侠26 分钟前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
devmoon34 分钟前
运行时(Runtime)是什么?为什么 Polkadot 的 Runtime 可以被“像搭积木一样”定制
开发语言·区块链·智能合约·polkadot·runtmie
时艰.35 分钟前
Java 并发编程 — 并发容器 + CPU 缓存 + Disruptor
java·开发语言·缓存
云中飞鸿36 分钟前
QTCreator快捷键
qt
忆~遂愿1 小时前
GE 引擎进阶:依赖图的原子性管理与异构算子协作调度
java·开发语言·人工智能
沐知全栈开发1 小时前
API 类别 - 交互
开发语言
人道领域1 小时前
SSM框架从入门到入土(AOP面向切面编程)
java·开发语言
铅笔侠_小龙虾1 小时前
Flutter 实战: 计算器
开发语言·javascript·flutter
2的n次方_2 小时前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言