Qt调用摄像头一,基础版

 

本示例,为纯Qt调用摄像头,功能比较简单,打开摄像头,设置参数,拍照

涉及到的功能有:

  获取摄像头列表

  获取摄像头分辨率

  获取摄像头帧率

  获取摄像头支持的视频模式

  设置摄像头参数

  拍照

 

此版本的缺点是:无法做复杂操作,比如:打开摄像头画面,将视频直接显示在 QWidget 上,这种做法无法实现旋转功能,需要借助QGraphics,但是开销会加大

 

 

QT       += core gui multimedia multimediawidgets printsupport

 

 

#include <QCamera>                  // 摄像头
#include <QCameraInfo>              // 摄像头信息
#include <QVideoProbe>              // 视频
#include <QVideoWidget>             // 视频显示窗口
#include <QCameraImageCapture>      // 拍照

 

 

#include "dialog.h"
#include "ui_dialog.h"


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


    // 初始化,读取摄像头信息
    QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
    foreach(const QCameraInfo &cameraInfo, cameras)
    {
        qDebug() << cameraInfo.deviceName();    // 摄像头完整信息
        qDebug() << cameraInfo.description();   // 摄像头名称
    }

    QCamera *dev = new QCamera(cameras.at(0));              // 创建设备
    QVideoWidget *view  = new QVideoWidget(ui->widget);     // 创建显示窗口 || 取景器
    view->setFixedSize(ui->widget->width(), ui->widget->height());  // 让视频适应显示窗口显示
    dev->setCaptureMode(QCamera::CaptureVideo);    // 设置捕捉模式为视频,CaptureViewfinder,CaptureVideo,CaptureStillImage
    dev->setViewfinder(view);                      // 设置显示位置
    dev->load();                                   // 加载摄像头




    // 获取分辨率列表
    QList<QSize> resolution = dev->supportedViewfinderResolutions();
    qDebug() << resolution.length();
    for (int i=0; i< resolution.length(); i++) {
        qDebug() << resolution.at(i).width() << "_" << resolution.at(i).height();
    }


    // 获取摄像头帧率
    QList<QCamera::FrameRateRange> frameRate = dev->supportedViewfinderFrameRateRanges();
    foreach (auto i, frameRate)
    {
        qDebug() << i.maximumFrameRate;
    }


    // 获取摄像头支持视频格式
    QList<QVideoFrame::PixelFormat> pixelFormat = dev->supportedViewfinderPixelFormats();
    foreach (auto i, pixelFormat)
    {
        qDebug() << i;
    }


    // 设置分辨率 & 帧率 (不能同时设置最大帧率和最小帧率,会报错)
    QCameraViewfinderSettings set;
    set.setResolution(QSize(3264, 2448));
    set.setMaximumFrameRate(15.0);
    set.setPixelFormat(QVideoFrame::Format_Jpeg);
    dev->setViewfinderSettings(set);
    dev->start();

    // 拍照
    QCameraImageCapture *img = new QCameraImageCapture(dev);
    dev->searchAndLock();
    img->capture("D:\\1.jpg");
    dev->unlock();
}

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

 

posted @ 2023-02-21 19:20  十一的杂文录  阅读(1140)  评论(0编辑  收藏  举报