QTQcamera的使用
关于Qcamera的简介
qcamera是基于qt平台用于读取计算机摄像头视频信号的接口函数,其优势为qt在windows,Android,ios等操作系统时,具有更快的响应速度,更高的帧数,更低的系统占用。为后续开发以opencv为基础的计算机视觉软件做前期准备。
代码部分
.pro工程文件
创建Qt Widgets Application工程,并添加QT +=multimedia,QT+=multimediawidgets
QT += core gui multimedia multimediawidgets serialport
.h文件
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QCameraInfo>
include 将Qcamera调用至工程
include 摄像头取景器库函数,显示摄像头实时画面
include 获取摄像头当前帧,截图拍照
include 提供当前可用视频设备信息以及摄像头接口信息
QCamera *camera;//定义摄像头指针对象
QCameraViewfinder *viewfind;//定义取景器指针对象
QList<QCameraInfo> cameras;//定义可用摄像头序列信息列表
QCameraImageCapture *imageCapture;//定义摄像头当前帧
.cpp文件
cameras = QCameraInfo::availableCameras();
foreach(const QCameraInfo &cameraInfo, cameras) {
qDebug() << "CameraInfo:" << cameraInfo;
ui->comboBox->addItem(cameraInfo.description())
}
获取当前可用摄像头信息,并显示给comboBox控件,方便用户选择使用摄像头
void MainWindow::on_comboBox_activated(int index)
{
qDebug()<<"Index"<< index <<": "<< ui->comboBox->currentText();
camera->stop();//关闭摄像头
camera = new QCamera(cameras[index]);//设定摄像头
camera->setCaptureMode(QCamera::CaptureVideo);//设置摄像头模式
viewfind = new QCameraViewfinder(this);//打开取景器
ui->horizontalLayout->addWidget(viewfind);//将取景器放入控件
// ui->ImageView->setScaledContents(true);
camera->setViewfinder(viewfind);//相机匹配取景器
imageCapture = new QCameraImageCapture(camera);
connect(imageCapture, SIGNAL(imageCaptured(int, QImage)), this, SLOT(Left_imageCaptured(int, QImage)));
//启动截图
camera->start();//启动摄像头
}
void MainWindow::Left_imageCaptured(int id, const QImage &preview)
{
ui->label->setPixmap(QPixmap::fromImage(preview.scaled(ui->label->size())));
}//指定位置显示截图
comboBox控件选择摄像头并打开
imageCapture->capture("3A.jpg");
截图命令,capture参数为所得图片名称及格式,路径为电脑默认图片路径。
可视化布局部分
comboBox控件
从用户角度来看,comboBox控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。本文中使用comboBox控件实现向用户展现可用摄像头的信息和期望摄像头的选择。
horizontalLayout控件
水平布局控件,用于放置取景器,实现取景器随着软件界面放大或缩小。
label控件
用来存放截到的图像,.scaled(ui->label->size())使图像在宽度和高度上的拉伸或压缩以适应软件界面变化。