查询摄像头支持分辨率的API

QCamera::supportedViewfinderResolutions() 

查询摄像头支持帧率的API

QCamera::supportedViewfinderFrameRateRanges() 

设置摄像头采集分辨率和帧率的API

void setViewfinderSettings(const QCameraViewfinderSettings &settings);

这个API可以设置摄像头帧率、比例、分辨率、格式的类

使用注意事项
查询和设置摄像头分辨率时,需要在摄像头启动后调用;即在调用QCamera::start()后, 在调用setViewfinderSettings才生效。

但是摄像头支持的分辨率、帧率、采样格式和比例之间是有相关联的;实际上摄像头每个分辨率都有其对应的帧率和格式;并不是单一性的。比如我的摄像头支持如下

分辨率:
QSize(160, 120); QSize(176, 144);QSize(320, 240);QSize(352, 288);QSize(640, 480);QSize(1280, 720)

帧率:
max rate =  5 min rate =  5
max rate =  10 min rate =  10
max rate =  15 min rate =  15
max rate =  30 min rate =  30

如果我设置分辨率为1280*720,帧率为30,则采集失败;

可以调用下面API查询其对应关系

QList<QCameraViewfinderSettings> supportedViewfinderSettings

代码如下

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    camera=new QCamera(0);//摄像头
    viewfinder=new QCameraViewfinder(this);//取景器

    QObject::connect(camera, SIGNAL(imageCaptured(int,QImage)), this, SLOT(displayImage(int,QImage)));
    camera->setCaptureMode(QCamera::CaptureStillImage);
    camera->setViewfinder(viewfinder);
    camera->start(); //启动摄像头

    //获取摄像头支持的分辨率、帧率等参数
    QList<QCameraViewfinderSettings > ViewSets = camera->supportedViewfinderSettings();
    int i = 0;
    qDebug() << "viewfinderResolutions sizes.len = " << ViewSets.length();
    foreach (QCameraViewfinderSettings ViewSet, ViewSets) {
        qDebug() << i++ <<" max rate = " << ViewSet.maximumFrameRate() << "min rate = "<< ViewSet.minimumFrameRate() << "resolution "<<ViewSet.resolution()<<\
                    "Format="<<ViewSet.pixelFormat()<<""<<ViewSet.pixelAspectRatio();
    }

    //设置摄像头参数
    camera->setViewfinderSettings(ViewSets[1]);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::displayImage(int ,QImage image)
{
    image=image.convertToFormat(QImage::Format_RGB888);
    ui->label->setPixmap(QPixmap::fromImage(image));
}

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐