前言
本篇文章来讲解一下如何使用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); }
具体效果大家可以去进行实际的操作。
总结
本篇文章就讲解到这里。