当前位置: 首页 > article >正文

QT打开摄像头采集

QT打开摄像头采集

今天好不容易把opencv的环境装好,然后想学习一下人脸识别的功能,但是在图书馆坐了4个多小时了,屁股疼就先写个摄像头采集的功能,明天继续学习吧,废话不多,嚼个奶片开始发车!!!!!!!!

我们设计我们的UI界面

非常简单!

UI界面设计

就这么简单,我们在Widget里显示图像,然后这个下拉框用来选择摄像头

然后我们来编写我们的代码

代码编写 

widget.h文件

#include <QWidget>
#include <QMouseEvent>
class QCamera;
class QCameraViewfinder;
class QCameraImageCapture;
class QCameraInfo;
class QCameraViewfinderSettings;

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;

    QCamera *camera;                   //相机
    QCameraViewfinder *viewfinder;     //取景器
    QList<QCameraInfo> cameras;        //相机列表
};

widget.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include <QCamera>
#include <QCameraInfo>
#include <QCameraViewfinder>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 获取所有可用的相机信息
    cameras = QCameraInfo::availableCameras();
    if(cameras.count() > 0) {
        // 如果有可用的相机,则使用第一个相机创建QCamera实例
        camera = new QCamera(cameras.at(0));
    }

    // 创建一个取景器QCameraViewfinder,并设置其父对象为当前Widget
    viewfinder = new QCameraViewfinder(this);
    // 将取景器设置为相机的取景器
    camera->setViewfinder(viewfinder);
    // 设置取景器的大小
    viewfinder->resize(600, 350);
    // 启动相机
    camera->start();

    // 添加初始化的相机选项到下拉框
    for(const QCameraInfo &cameraInfo:cameras) {
        ui->comboBox_cam->addItem(cameraInfo.description());
    }
    // 默认选择第一个相机
    ui->comboBox_cam->setCurrentIndex(0);

    // 连接下拉框camera的选择改变信号到槽函数,用于更换相机
    connect(ui->comboBox_cam, QOverload<int>::of(&QComboBox::activated), [=](int index){
        camera->stop();
        delete camera;
        camera = new QCamera(cameras[index]);
        camera->setViewfinder(viewfinder);
        camera->start();
    });
}

Widget::~Widget()
{
    delete ui;
    delete camera;
}

// 移除了captureImage函数和相关的信号连接

好嘞,去吃饭去了,再不去没饭了


http://www.kler.cn/news/312346.html

相关文章:

  • Unity 高亮插件Highlight Plus快速入门
  • linux下的分布式Minio部署实践
  • redis集群模式连接
  • 探索AutoIt:自动化任务的Python魔法棒!
  • Spring Boot- 数据库相关问题
  • docker部署个人网页导航
  • 影视会员充值api?接口对接需要做哪些准备工作?
  • SAP B1 流程实操 - 营销单据销售部分(下)
  • 电脑视频编辑常用软件:12个在线视频剪辑方法,这份免费攻略真实在!
  • LabVIEW机械产品几何精度质检系统
  • 金属3D打印经济效益高吗?
  • 分布式事务一致性:本地消息表设计与实践
  • Jenkins自动化部署后端项目看这篇就够了
  • ubuntu安装emqx
  • Vue(13)——router-link
  • MATLAB基本语句
  • LLM(大语言模型)和AIGC入门学习路线图,零基础入门到精通,收藏这一篇就够了
  • JVM 调优篇5 jvm性能监控
  • DHCP服务(relay中继)实验简述
  • OpenCV绘制ROI区域(五)
  • constexpr与const的区别
  • 【正负交替的分数求和】
  • Linux环境基础开发工具---vim
  • 4×4矩阵键盘详解(STM32)
  • 什么是 WebApiEngine?
  • C#中单例模式CSingleton
  • 前端如何快速调试线上问题
  • react的组件的概念和使用
  • 家庭聚餐:用白酒传递亲情与温暖
  • 滚雪球学SpringCloud[4.2讲]: Zuul:Netflix API Gateway详解