QT 调用USB免驱摄像头

文章目录

  • 前言
  • 一、界面布局
  • 二、QImageEncoderSettings类
  • 三、图像的显示
  • 总结


前言

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

一、界面布局

这里使用QT设计师进行界面的布局:
QT 调用USB免驱摄像头_第1张图片

QT 调用USB免驱摄像头_第2张图片

二、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 
#include 
#include 
#include 
#include 

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

}



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

总结

本篇文章就讲解到这里。

你可能感兴趣的:(QT项目实战,qt,开发语言)