QT 调用USB免驱摄像头
@TOC
前言
本篇文章来讲解一下如何使用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);
}
具体效果大家可以去进行实际的操作。
总结
本篇文章就讲解到这里。
- 点赞
- 收藏
- 关注作者
评论(0)