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。
代码如下:
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函数进行图片的保存,传入参数为保存路径。
代码如下:
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中不能进行摄像头视频的保存,因此这里不多说,