运行环境检查:
首先检查自己的QT版本及系统环境是否支持Qcamera:Qcamera是multimedia模块中的接口函数,multimedia模块在QT5.3之后是自带的。在windows环境下可直接使用,在LINUX 环境下需要手动安装multimedia模块。
代码片段:
pro文件包含:
QT += multimedia multimediawidgets
示例
#include "mainwindow.h"
#include "ui_mainwindow.h"
//相机相关的头文件
#include <QCamera>
#include <QCameraInfo>
#include <QVideoProbe>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_camera = new QCamera(this);//初始化摄像头设备
QVideoProbe *m_pProbe = new QVideoProbe;
if(m_pProbe != nullptr)
{
m_pProbe->setSource(m_camera); // Returns true, hopefully.
connect(m_pProbe, SIGNAL(videoFrameProbed(QVideoFrame)),this, SLOT(slotOnProbeFrame(QVideoFrame)),Qt::QueuedConnection);
}//其中SIGNAL(videoFrameProbed(QVideoFrame)为VideoProbe模块自带的信号
m_camera->setCaptureMode(QCamera::CaptureViewfinder);//设置捕捉模式为视频
m_camera->setViewfinder(ui->centralWidget);//设置 摄像头画面的显示位置
m_camera->start();//开启摄像头
//查询摄像头支持的分辨率
QList<QSize> sizes = m_camera->supportedViewfinderResolutions();
qDebug() << "viewfinderResolutions sizes.len = " << sizes.length();
foreach (QSize size, sizes) {
qDebug() << "Resolutions size = " << size;
}
//摄像头参数初始化,根据需求用户自定义摄像头分辨率,也可以用来设置摄像头数据类型
QCameraViewfinderSettings set;
set.setResolution(VIDEO_WIDTH, VIDEO_HEIGHT);//设置分辨率
//set.setPixelFormat(QVideoFrame::Format_YUYV); //设置像素格式 Android上只支持NV21格式
m_camera->setViewfinderSettings(set);
//包含头文件QCameraInfo
QList<QCameraInfo> cameras = QCameraInfo::availableCameras();//获取可用摄像头设备列表
foreach (const QCameraInfo &cameraInfo, cameras)
{
qDebug()<<"检测到设备:"<<cameraInfo.deviceName();//摄像头的设备名称
}
}
//图像触发的槽函数
void MainWindow::slotOnProbeFrame(const QVideoFrame &frame)
{
QVideoFrame cloneFrame(frame);//类拷贝操作,fram -> clonframe
cloneFrame.map(QAbstractVideoBuffer::ReadOnly);
//视频缓冲区数据映射到系统内存
//unsigned char rgb_buffer[VIDEO_WIDTH*VIDEO_HEIGHT*3];
qDebug()<<"设备数据格式:"<< cloneFrame.pixelFormat()<<endl;
cloneFrame.unmap();
}
MainWindow::~MainWindow()
{
delete ui;
}
评论 (0)