QT 调用USB免驱摄像头

2023-07-29 20:36:34


前言

本篇文章来讲解一下如何使用QT调用摄像头,这里我使用的是USB免驱动摄像头,使用不需要按照驱动QT就可以调用到摄像头。

一、界面布局

这里使用QT设计师进行界面的布局:
在这里插入图片描述

在这里插入图片描述

二、QImageEncoderSettings类

QImageEncoderSettings 类是 Qt 中用于配置图像编码设置的类。它用于指定图像编码器的参数,例如压缩质量、图像大小、格式等。下面是 QImageEncoderSettings 类的一些重要成员和功能:

1.构造函数:QImageEncoderSettings::QImageEncoderSettings() 用于创建一个默认的图像编码设置对象。

2.QImageEncoderSettings::codec():获取或设置图像编码器的编解码器(codec)。编码器用于将图像数据编码为指定格式(例如 JPEG、PNG 等)。

3.QImageEncoderSettings::compressionQuality():获取或设置图像编码的压缩质量。压缩质量是一个介于 0 和 100 之间的整数,值越高表示质量越好但文件大小可能更大(仅适用于支持压缩的图像格式)。

4.QImageEncoderSettings::setResolution(int width, int height):设置图像的分辨率(宽度和高度)。该函数接受两个整数参数表示宽度和高度。

5.QImageEncoderSettings::resolution():返回分辨率的 QSize 对象,可以通过 width() 和 height() 函数获取宽度和高度。

6.QImageEncoderSettings::setFormat(const QString &format):设置图像编码的格式。格式应该是编码器支持的有效格式名称的字符串(例如 “jpeg”、“png” 等)。

7.QImageEncoderSettings::format():获取图像编码的格式。

8.QImageEncoderSettings::isNull():检查图像编码设置是否为空。如果设置为空,则表示未指定任何设置。

可以通过以下方式使用 QImageEncoderSettings 类来配置图像编码设置:

QImageEncoderSettings settings;
settings.setCodec("jpeg");
settings.setCompressionQuality(90);
settings.setResolution(800, 600);

上述示例代码设置了图像编码设置的编解码器为 “jpeg”,压缩质量为 90,分辨率为 800x600。

QImageEncoderSettings 类通常与 QMediaRecorder 或 QCameraImageCapture 类一起使用,以配置图像或视频的编码设置。

三、图像的显示

.h文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QCameraViewfinder>
#include <QCamera>
#include <QCameraInfo>
#include <QCameraImageCapture>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

    QCamera* m_camera;
    QCameraImageCapture* m_imageCapture;

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_startbtn_clicked();

    void on_stopbtn_clicked();

    void on_resolutioncom_currentIndexChanged(const QString &arg1);

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

.cpp文件:

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

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


    QList<QCameraInfo> cameras = QCameraInfo::availableCameras();//获取摄像头信息

    for (int i = 0; i < cameras.count(); i++)
    {
        const QCameraInfo cameraInfo = cameras.at(i);
        m_camera = new QCamera(cameraInfo);//创建摄像头
        m_imageCapture = new QCameraImageCapture(m_camera);//创建捕获图像类

        ui->devicecom->addItem(cameraInfo.description());

        m_camera->setViewfinder(ui->widget);//camera设置视图

        m_camera->start();//开始拍照

        /* 获取当前分辨率 */
        QList<QSize> resolutions = m_imageCapture->supportedResolutions();

        for (int j = 0; j < resolutions.count(); ++j)
        {
        	/*将当前支持的分辨率添加进入combox中*/
            const QSize resolution = resolutions.at(j);
            ui->resolutioncom->addItem(QString::number(resolution.width()) + "x" + QString::number(resolution.height()));
        }

    }

}

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

void Widget::on_startbtn_clicked()
{

}

void Widget::on_stopbtn_clicked()
{
    m_imageCapture->capture();//捕获照片
}

void Widget::on_resolutioncom_currentIndexChanged(const QString &arg1)
{
    QString resolutions = arg1;
    QString xresolutions = resolutions.split("x").at(0);
    QString yresolutions = resolutions.split("x").at(1);

    // 设置目标分辨率
    QImageEncoderSettings settings = m_imageCapture->encodingSettings();

    settings.setResolution(xresolutions.toInt(), yresolutions.toInt());

    m_imageCapture->setEncodingSettings(settings);

}



具体效果大家可以去进行实际的操作。

总结

本篇文章就讲解到这里。

更多推荐

转行车载做开发,首先得掌握好Android Framework~

前言在当今社会,科技的快速发展推动了各行各业的变革。移动设备作为人们生活、工作、学习的重要工具,其市场份额逐年攀升。Android作为全球最受欢迎的移动操作系统之一,为开发者提供了广阔的发展空间。但是现在Android发展比较尴尬,之前想吃它红利的人群太多,加快了行业内卷的部分,致使现在Android人才市场饱,甚至可

压电换能器的工作原理和应用(功率放大器)

在日常生活中,可能会遇到很难测量的物理量,例如施加在金属上的机械应力、温度、压力水平等……对于所有这些应用,需要一种能够以我们熟悉的单位和校准来测量这些未知量的设备,而比较常用的设备是换能器。换能器是一种电气设备,可以将任何类型的物理量以成比例的电量形式转换为电压或电流。按照使用材电磁特性来划分,换能器主要有磁致伸缩和

得帆云“智改数转,非同帆响”-AIGC+低代码PaaS平台系列白皮书,正式发布!

5月16日下午,由上海得帆信息技术有限公司编写,上海市工业互联网协会指导的以“智改数转,非同帆响”为主题的《得帆云AIGC+低代码PaaS平台系列白皮书》正式在徐汇西岸国际人工智能中心发布。本次发布会受到了上海市徐汇区政府、各大媒体和业内专家的广泛关注。上海市工业互联网协会副秘书长王云、上海市徐汇区科委主任张宁、上海市

Spark【Spark SQL(四)UDF函数和UDAF函数】

UDF函数UDF是我们用户可以自定义的函数,我们通过SparkSession对象来调用udf的register(name:String,func(A1,A2,A3...))方法来注册一个我们自定义的函数。其中,name是我们自定义的函数名称,func是我们自定义的函数,它可以有很多个参数。通过UDF函数,我们可以针对某

MySQL学习6:索引

来源教学视频来源:黑马程序员MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括简介索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特点查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高价查找算法

mysql数据库基础

目录一、数据库基本概念1.数据:2.表:3.数据库:二、数据库管理系统:1、数据库管理系统介绍:2、数据库系统:3、DBMS工作模式:三、数据库分类:1、关系型数据库:2、关系型数据库的存储结构3、关系型数据库的优缺点:4、非关系型数据库4.1非关系型数据库的优点:4.2非关系型数据库的缺点:一、数据库基本概念1.数据

JavaScript-DOM实战案例

一、window定时器1.window定时器方法有时我们并不想立即执行一个函数,而是等待特定一段时间之后再执行,我们称之为“计划调用(schedulingacall)”。目前有两种方式可以实现:setTimeout允许我们将函数推迟到一段时间间隔之后再执行。setInterval允许我们重复运行一个函数,从一段时间间隔

如何通过百度SEO优化提升网站排名(掌握基础概念,实现有效优化)

随着互联网的发展,搜索引擎优化(SEO)成为了网站优化中不可或缺的一部分。在中国,百度搜索引擎占据着主导地位,因此掌握百度SEO概念和优化技巧对网站的排名和曝光非常重要。百度SEO排名的6个有效方法:首先是关键词研究。通过深入了解目标用户的搜索习惯和需求,选择合适的关键词并进行优化;其次是页面优化,蘑菇号https:/

初步了解华为的MTL(市场到线索)流程的基本概念和来龙去脉

前两天,有读者给华研荟发私信,说在学习华为资料的时候看到华为有一个MTL流程,想了解下这个MTL流程和LTC流程有什么区别?既然有了LTC流程,为什么还要MTL流程呢?为此,今天华研荟给大家简要介绍华为的MTL流程,也是非常重要的一个业务流程。如华研荟前面的文章中所提到的,华为认为一个企业运作的主业务主流程就三个:IP

3-D HANet:一种用于目标检测的柔性三维 HeatMap 辅助网络

论文背景室外场景感知使用Lidar:1.点云数据不受天气(雾、风暴、雨和雪)的影响,支持稳定的环境感知;2.点云数据在很大程度上保留了原来中物体的空间结构特征。3D目标检测是室外场景感知的重要组成部分。从一个不完整的点云空间结构中学习目标的完整尺寸和准确定位是三维目标检测的关键。空间结构不完整:受传感器、遮挡、物体材质

华为云云耀云服务器L实例评测|centos7.9在线使用cloudShell下载rpm解压包安装mysql并开启远程访问

文章目录⭐前言⭐使用华为cloudShell连接远程服务器💖进入华为云耀服务器控制台💖选择cloudShell⭐安装mysql压缩包💖wget下载💖tar解压💖安装步骤💖初始化数据库💖修改密码💖开启远程账号访问💖安全组开放3306端口💖本地navicat连接⭐总结⭐结束⭐前言大家好,我是yma16,

热文推荐