QT 调用USB免驱摄像头


前言

本篇文章来讲解一下如何使用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);

}



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

总结

本篇文章就讲解到这里。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Qt是一个跨平台的C++应用程序框架,OpenCV是一个开源的计算机视觉库,能够处理图像和视频。下面是使用Qt和OpenCV调用USB摄像头的步骤: 1. 首先,确保已经安装好Qt和OpenCV库。 2. 在Qt项目中,包含OpenCV的头文件和库文件。在.pro文件中添加以下内容: ``` INCLUDEPATH += /path/to/opencv LIBS += -L/path/to/opencv/lib -lopencv_core -lopencv_highgui ``` 请将`/path/to/opencv`替换为OpenCV的安装路径。 3. 创建一个Qt窗口应用程序(或其他类型的项目),并在窗口中添加一个显示图像的窗口部件(如QLabel)。 4. 在代码中导入OpenCV和Qt的头文件: ```cpp #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <QLabel> ``` 5. 创建一个OpenCV的VideoCapture对象,以打开摄像头: ```cpp cv::VideoCapture cap(0); // 0表示第一个摄像头,如果有多个摄像头,请调整参数 ``` 6. 创建一个循环,不断读取摄像头的帧,并在Qt窗口中显示: ```cpp cv::Mat frame; // 用于存储帧的图像数据 QImage qimg; // 用于将OpenCV图像数据转换为Qt图像数据 while (true) { cap >> frame; // 读取一帧图像数据 // 将OpenCV图像数据转换为Qt图像数据 qimg = QImage(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888).rgbSwapped(); // 在Qt窗口中显示图像 QLabel *label = new QLabel; label->setPixmap(QPixmap::fromImage(qimg)); label->show(); // 通过QCoreApplication::processEvents()更新Qt窗口的显示 QCoreApplication::processEvents(); } ``` 7. 运行程序,即可看到通过USB摄像头获取的图像在Qt窗口中实时显示。 这是一个简单的示例,可以根据需要进行进一步的开发和调整。希望这个回答能够帮到你! ### 回答2: 在Qt中使用OpenCV调用USB摄像头有以下步骤: 1. 首先,确保已经将OpenCV库正确地集成到Qt项目中。可以通过在.pro文件中添加相应的库路径和链接库来实现。 2. 创建一个Qt窗口或界面,用于显示摄像头捕获到的图像。 3. 在Qt中,可以使用QCamera类来调用摄像头。首先需要初始化摄像头对象,使用QCamera构造函数或QCameraInfo类获取连接到系统的摄像头设备信息。 4. 接下来,使用QCameraViewfinder类创建一个视图,用于显示摄像头捕获到的实时图像。 5. 在OpenCV中,可以使用VideoCapture类来打开和读取摄像头捕获的视频帧。可以通过传递摄像头设备的索引值或摄像头设备的路径(例如:0表示第一个摄像头)来打开摄像头。 6. 为了将OpenCV捕获的视频帧显示到Qt窗口中,我们需要创建一个QImage对象,并使用QImage构造函数将OpenCV捕获的图像数据转换为Qt可识别的格式。 7. 接下来,我们需要将QImage对象显示在Qt视图中。可以使用QCameraViewfinder的setFrame方法将图像数据传递给视图进行显示。 8. 如果想要在Qt界面中进行一些图像处理操作,可以使用OpenCV提供的函数进行图像处理。例如,使用cv::cvtColor函数将图像颜色空间转换为灰度图像。 9. 最后,启动摄像头的捕获,使用QCamera的start()方法启动摄像头捕获,即可在Qt窗口中实时显示摄像头的图像。 通过以上步骤,就可以在Qt中使用OpenCV调用USB摄像头并显示捕获到的实时图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花落已飘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值