iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能
  • 454
分享到

Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能

2023-07-05 21:07:09 454人浏览 泡泡鱼
摘要

这篇文章主要介绍“Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能”文章能帮助大

这篇文章主要介绍“Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能”文章能帮助大家解决问题。

demo中主要涉及的Qt类有:相机类QCamera,取景器类QCameraViewfinder,图像捕获类QCameraimageCapture,因此添加模块multimedia multimediawidgets。

QT += core gui multimedia multimediawidgets

在widget.h中添加相关类声明:

class QCamera;class QCameraViewfinder;class QCameraImageCapture;class QCameraInfo;class QCameraViewfinderSettings;

在类Widget中添加私有变量:

QCamera *camera;                   //相机QCameraViewfinder *viewfinder;     //取景器QCameraImageCapture *imageCapture; //图像捕获QList<QCameraInfo> cameras;        //相机列表QList<QSize> mResSize = {};        //分辨率列表

在widget.cpp中添加头文件:

#include <QCamera>#include <QCameraInfo>#include <QCameraViewfinder>#include <QCameraImageCapture>#include <QFileDialog>#include <QList>#include <QDebug>

在widget.cpp的构造函数中添加代码:

先设置下窗口名称及大小

setWindowTitle("Camera");setFixedSize(600,400);

接着获取所有相机列表并选择一个相机初始化

cameras = QCameraInfo::availableCameras();   //获取所有相机的列表//qDebug() << "this is camera: ";if (cameras.count() > 0) {    for(const QCameraInfo &cameraInfo:cameras) {        qDebug() << cameraInfo.description();    }    camera = new QCamera(cameras.at(0));     //初始化实例化一个相机对象}

实例化取景器类,取景器本质是一个窗口类,若不将当前窗口设为父对象,则可以另起一个窗口显示。将当前窗口设为父对象后,视频画面便在当前窗口显示。

//设置取景器viewfinder = new QCameraViewfinder(this);camera->setViewfinder(viewfinder);viewfinder->resize(600,350);                 //设置取景器显示大小//viewfinder->show();

实例化一个图像捕获类,并开启相机

imageCapture = new QCameraImageCapture(camera);camera->start();                             //开启相机

设置默认摄像头的分辨率及帧率。注意:帧率一定要与摄像头匹配,否则不会显示画面。

//设置默认摄像头参数QCameraViewfinderSettings set;set.setResolution(640, 480);                 //设置显示分辨率set.setMaximumFrameRate(25);                 //设置帧率camera->setViewfinderSettings(set);

设置两个下拉框部件的初始化

//添加初始化的相机选项for(const QCameraInfo &cameraInfo:cameras) {    qDebug() << "CameraInfo:" << cameraInfo;    ui->cameraSel->addItem(cameraInfo.description());}ui->cameraSel->setCurrentIndex(0);//添加初始化相机的分辨率选项mResSize = camera->supportedViewfinderResolutions();//qDebug() << "mResSize = " << mResSize;for (const QSize &msize:mResSize) {       qDebug() << msize; //摄像头支持分辨率打印       ui->resolutionSel->addItem(QString::number(msize.width(), 10) + "*" + QString::number(msize.height(), 10));}ui->resolutionSel->setCurrentIndex(0);

调整下widget.ui的内容,添加两个下拉框及一个按钮

Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能

编写信号槽连接

首先是选择摄影机,先释放之前的内存,再将camera指向新的。选择新的相机意味着分辨率选项也会变化,因此需要删除分辨率下拉框中前相机的所有分辨率选项,再添加新相机的所有分辨率选项。

connect(ui->cameraSel, QOverload<int>::of(&QComboBox::activated), [=](int index){    //qDebug() << "Index" << ui->cameraSel->currentIndex() << ": " << ui->cameraSel->currentText();    camera->stop();    delete camera;    camera = new QCamera(cameras[index]);                //camera指向指定的摄像头    camera->setCaptureMode(QCamera::CaptureStillImage);  //设定捕获模式    camera->setViewfinder(viewfinder);                   //设置取景器    camera->start();    //删除前相机的所有分辨率内容    for (int i = 0; i < mResSize.size(); i++) {           ui->resolutionSel->removeItem(0);    }    //添加新相机的所有分辨率    mResSize.clear();    //qDebug() << "now mResSize = " << mResSize;    mResSize = camera->supportedViewfinderResolutions();    for (const QSize &msize:mResSize) {           qDebug() << msize; //摄像头支持分辨率打印           ui->resolutionSel->addItem(QString::number(msize.width(), 10) + "*" + QString::number(msize.height(), 10));    }    ui->resolutionSel->setCurrentIndex(0);});

选择分辨率

connect(ui->resolutionSel, QOverload<int>::of(&QComboBox::activated), [=](int index){    //qDebug() << "Index" << ui->resolutionSel->currentIndex() << ": " << ui->resolutionSel->currentText();    //qDebug() << "mResSize:" << mResSize[index];    //重新设置摄像头参数    QCameraViewfinderSettings reset;    reset.setResolution(mResSize[index]);    camera->setViewfinderSettings(reset);});

截图按钮

connect(ui->screenShot, &QPushButton::clicked, [=](){    camera->setCaptureMode(QCamera::CaptureStillImage);    delete imageCapture;    imageCapture = new QCameraImageCapture(camera);    QString fileName = QFileDialog::getSaveFileName();    camera->searchAndLock();    imageCapture->capture(fileName);    camera->unlock();});

附完整代码

widget.h

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEclass QCamera;class QCameraViewfinder;class QCameraImageCapture;class QCameraInfo;class QCameraViewfinderSettings;class Widget : public QWidget{    Q_OBJECTpublic:    Widget(QWidget *parent = nullptr);    ~Widget();private:    Ui::Widget *ui;    QCamera *camera;                   //相机    QCameraViewfinder *viewfinder;     //取景器    QCameraImageCapture *imageCapture; //图像捕获    QList<QCameraInfo> cameras;        //相机列表    QList<QSize> mResSize = {};        //分辨率列表    //QCameraViewfinderSettings *set;};#endif // WIDGET_H

widget.cpp

#include "widget.h"#include "ui_widget.h"#include <QCamera>#include <QCameraInfo>#include <QCameraViewfinder>#include <QCameraImageCapture>#include <QFileDialog>#include <QList>#include <QDebug>Widget::Widget(QWidget *parent)    : QWidget(parent)    , ui(new Ui::Widget){    ui->setupUi(this);    setWindowTitle("Camera");    setFixedSize(600,400);    cameras = QCameraInfo::availableCameras();   //获取所有相机的列表    //qDebug() << "this is camera: ";    if (cameras.count() > 0) {        for(const QCameraInfo &cameraInfo:cameras) {            qDebug() << cameraInfo.description();        }        camera = new QCamera(cameras.at(0));     //初始化实例化一个相机对象    }    //设置取景器    viewfinder = new QCameraViewfinder(this);    camera->setViewfinder(viewfinder);    viewfinder->resize(600,350);                 //设置取景器显示大小    //viewfinder->show();    imageCapture = new QCameraImageCapture(camera);    camera->start();                             //开启相机    //设置默认摄像头参数    QCameraViewfinderSettings set;    set.setResolution(640, 480);                 //设置显示分辨率    set.setMaximumFrameRate(25);                 //设置帧率    camera->setViewfinderSettings(set);    //添加初始化的相机选项    for(const QCameraInfo &cameraInfo:cameras) {        qDebug() << "CameraInfo:" << cameraInfo;        ui->cameraSel->addItem(cameraInfo.description());    }    ui->cameraSel->setCurrentIndex(0);    //添加初始化相机的分辨率选项    mResSize = camera->supportedViewfinderResolutions();    //qDebug() << "mResSize = " << mResSize;    for (const QSize &msize:mResSize) {           qDebug() << msize; //摄像头支持分辨率打印           ui->resolutionSel->addItem(QString::number(msize.width(), 10) + "*" + QString::number(msize.height(), 10));    }    ui->resolutionSel->setCurrentIndex(0);    //信号槽连接    connect(ui->cameraSel, QOverload<int>::of(&QComboBox::activated), [=](int index){        //qDebug() << "Index" << ui->cameraSel->currentIndex() << ": " << ui->cameraSel->currentText();        camera->stop();        delete camera;        camera = new QCamera(cameras[index]);                //camera指向指定的摄像头        camera->setCaptureMode(QCamera::CaptureStillImage);  //设定捕获模式        camera->setViewfinder(viewfinder);                   //设置取景器        camera->start();        //删除前相机的所有分辨率内容        for (int i = 0; i < mResSize.size(); i++) {               ui->resolutionSel->removeItem(0);        }        //添加新相机的所有分辨率        mResSize.clear();        //qDebug() << "now mResSize = " << mResSize;        mResSize = camera->supportedViewfinderResolutions();        for (const QSize &msize:mResSize) {               qDebug() << msize; //摄像头支持分辨率打印               ui->resolutionSel->addItem(QString::number(msize.width(), 10) + "*" + QString::number(msize.height(), 10));        }        ui->resolutionSel->setCurrentIndex(0);    });    connect(ui->resolutionSel, QOverload<int>::of(&QComboBox::activated), [=](int index){        //qDebug() << "Index" << ui->resolutionSel->currentIndex() << ": " << ui->resolutionSel->currentText();        //qDebug() << "mResSize:" << mResSize[index];        //重新设置摄像头参数        QCameraViewfinderSettings reset;        reset.setResolution(mResSize[index]);        camera->setViewfinderSettings(reset);    });    connect(ui->screenShot, &QPushButton::clicked, [=](){        camera->setCaptureMode(QCamera::CaptureStillImage);        delete imageCapture;        imageCapture = new QCameraImageCapture(camera);        QString fileName = QFileDialog::getSaveFileName();        camera->searchAndLock();        imageCapture->capture(fileName);        camera->unlock();    });}Widget::~Widget(){    delete ui;}

关于“Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能

本文链接: https://www.lsjlt.com/news/355491.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt使用QCamera实现切换相机,分辨率和图像捕获功能
    demo中主要涉及的Qt类有:相机类QCamera,取景器类QCameraViewfinder,图像捕获类QCameraImageCapture,因此添加模块multimedia m...
    99+
    2023-05-14
    Qt QCamera应用 Qt QCamera相机 Qt QCamera图像捕获
  • Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能
    这篇文章主要介绍“Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Qt怎么使用QCamera实现切换相机,分辨率和图像捕获功能”文章能帮助大...
    99+
    2023-07-05
  • 怎么使用JS实现简单的图片切换功能
    这篇“怎么使用JS实现简单的图片切换功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用JS实现简单的图片切换功能”文...
    99+
    2023-07-02
  • 怎么使用Python+OpenCV实现图像识别替换功能
    本文小编为大家详细介绍“怎么使用Python+OpenCV实现图像识别替换功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python+OpenCV实现图像识别替换功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-02
  • 使用Python怎么实现一个图像分类功能
    今天就跟大家聊聊有关使用Python怎么实现一个图像分类功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语...
    99+
    2023-06-14
  • OpenCV-Python怎么使用分水岭算法实现图像分割与提取功能
    小编给大家分享一下OpenCV-Python怎么使用分水岭算法实现图像分割与提取功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!随着当今世界的发展,计算机视觉技...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作