首页 > 其他分享 >Qt调用摄像头一,基础版

Qt调用摄像头一,基础版

时间:2023-02-21 19:35:52浏览次数:27  
标签:调用 Qt dev ui Dialog qDebug include 摄像头

 

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

涉及到的功能有:

  获取摄像头列表

  获取摄像头分辨率

  获取摄像头帧率

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

  设置摄像头参数

  拍照

 

 

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;
}

 

标签:调用,Qt,dev,ui,Dialog,qDebug,include,摄像头
From: https://www.cnblogs.com/shiyixirui/p/17142126.html

相关文章

  • 在用python调用emqx的API时遇到数据格式转换问题
    获取的response的格式是bytes的数据类型,我需要转化成字符串或者字典使用,这里复习一下下面几个函数1.json->stringstr=json.dumps(json_type)2.bytes->stringstr=......
  • Qt实现扇形图(2)
    #include"pieview.h"#include"mainwindow.h"#include<QtWidgets>MainWindow::MainWindow(QWidget*parent):QMainWindow(parent){QMenu*fileMenu=newQMenu(......
  • Qt音视频开发15-动态切换解码内核的设计
    一、前言动态切换解码内核这个需求也是源自客户的真实需求,既然是动态切换,那肯定是运行期间切换,而不是通过改变标志位重新编译程序来切换,最开始做的就是这种方式,这样就是实......
  • 如何在高版本Android 调用 SystemProperties.set
     在高版Android中是无法找到SystemProperties类的,所以我们需要手动导入低版本的SDK.第一步、在app的build.gradle添加:StringSDK_DIR=System.getenv("/Users/dan......
  • 不同程序集,名称空间类名和方法签名都一样的方法,如何调用
    有时候,你可能会遇到这样的问题,不同程序集,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。创建两个不同的程序集我们来创建......
  • 不同程序集,名称空间类名和方法签名都一样的方法,如何调用
    有时候,你可能会遇到这样的问题,不同程序集,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。创建两个不同的程序集我们来创建......
  • 不同程序集,名称空间类名和方法签名都一样的方法,如何调用
    有时候,你可能会遇到这样的问题,不同程序集,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。创建两个不同的程序集我们来创建......
  • QT实现简单曲线图
    首先用到的控件为QGraphicsView使用到的头文件#include<QChart>#include<QChartView>#include<QtWidgets/QMainWindow>#include<QWidget>在QTPro文件当中需要添......
  • Qt实现画图工具
    #include<QtWidgets>#include"mainwindow.h"#include"scribblearea.h"//![0]MainWindow::MainWindow(){scribbleArea=newScribbleArea;setCentralWidget(scr......
  • 在Qt4中添加QSerialPort模块
    在Qt5及以上的版本中提供了QSerialPort串口模块,如果想在Qt4版本中使用该模块,可以自行安装,但仅限于5.5以下的QSerialPort版本。下面就以qtserialport-opensource-src-5.4.2......