QT-利用Qcamera查看USB摄像头参数(数据帧格式+分辨率)

QT-利用Qcamera查看USB摄像头参数(数据帧格式+分辨率)

247
247
2023-05-19 / 0 评论 / 250 阅读 / 正在检测是否收录...

运行环境检查:
首先检查自己的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

评论 (0)

取消