Qt实现UVC摄像头捕获

news/2025/10/17 9:14:59/文章来源:https://www.cnblogs.com/y54y5666/p/19147002

一、环境配置

  1. 开发环境: Qt 5.15+ (MSVC 2019编译器) Windows/Linux

  2. 依赖配置

    # .pro文件配置
    QT += multimedia multimediawidgets
    LIBS += -lQt5Multimedia
    

二、核心代码实现

1. 设备枚举与选择

// 获取所有UVC摄像头设备
QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
foreach (const QCameraInfo &cameraInfo, cameras) {if (cameraInfo.deviceName().contains("UVC")) {ui->cmbCamera->addItem(cameraInfo.description(), QVariant::fromValue(cameraInfo));}
}

2. 摄像头初始化

void MainWindow::initCamera() {QCameraInfo cameraInfo = ui->cmbCamera->currentData().value<QCameraInfo>();m_camera = new QCamera(cameraInfo, this);// 配置视频格式QCameraViewfinderSettings settings;settings.setResolution(1280, 720);settings.setPixelFormat(QVideoFrame::Format_YUYV);m_camera->setViewfinderSettings(settings);// 设置预览控件m_viewfinder = new QCameraViewfinder(this);m_camera->setViewfinder(m_viewfinder);ui->layout->addWidget(m_viewfinder);connect(m_camera, &QCamera::errorOccurred, this, &MainWindow::handleCameraError);
}

3. 视频帧捕获

// 自定义视频表面类
class VideoSurface : public QAbstractVideoSurface {
public:explicit VideoSurface(QWidget *parent = nullptr) : QAbstractVideoSurface(parent) {}QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const override {return {QVideoFrame::Format_RGB32, QVideoFrame::Format_YUYV};}bool present(const QVideoFrame &frame) override {if (frame.isValid()) {QImage image(frame.bits(), frame.width(), frame.height(), QVideoFrame::imageFormatFromPixelFormat(frame.pixelFormat()));emit frameCaptured(image);  // 发射信号传递QImage}return true;}signals:void frameCaptured(const QImage &);
};// 在MainWindow中使用
VideoSurface *surface = new VideoSurface(this);
m_camera->setViewfinder(surface);
connect(surface, &VideoSurface::frameCaptured, this, &MainWindow::processFrame);

4. 图像处理与保存

void MainWindow::processFrame(const QImage &image) {ui->imageLabel->setPixmap(QPixmap::fromImage(image));// 保存图像示例static int frameCount = 0;if (ui->chkSave->isChecked()) {QString fileName = QString("frame_%1.jpg").arg(++frameCount);image.save(fileName, "JPG", 90);}
}

三、高级功能实现

1. 多格式支持

// 查询摄像头支持的格式
QCameraViewfinderSettings settings = m_camera->viewfinderSettings();
QList<QSize> resolutions = m_camera->supportedViewfinderResolutions();
QList<QVideoFrame::PixelFormat> formats = m_camera->supportedViewfinderPixelFormats();

2. 曝光控制

// 自动曝光设置
m_camera->exposure()->setAutoExposure(QCameraExposure::ExposureAuto);// 手动调整曝光值
m_camera->exposure()->setManualExposure(0.5f);

3. 实时滤镜

// 添加色度偏移效果
QVideoProbe *probe = new QVideoProbe(this);
probe->setSource(m_camera);
connect(probe, &QVideoProbe::videoFrameProbed, [](const QVideoFrame &frame) {QVideoFrame filteredFrame(frame);// 实现自定义滤镜算法return filteredFrame;
});

四、错误处理

void MainWindow::handleCameraError(QCamera::Error error) {QMessageBox::critical(this, "错误", QString("摄像头错误: %1\n错误描述: %2").arg(error).arg(m_camera->errorString()));
}// 权限检查
void MainWindow::checkPermissions() {#if defined(Q_OS_WIN)// Windows权限检查#elif defined(Q_OS_LINUX)if(!QFile::exists("/dev/video0")) {QMessageBox::warning(this, "警告", "未检测到UVC设备");}#endif
}

五、性能优化

  1. 多线程处理

    // 使用QtConcurrent处理图像
    QtConcurrent::run([this](const QImage &img){// 后台处理图像emit processedImage(result);
    });
    
  2. 硬件加速

    // 启用GPU加速
    QSurfaceFormat format;
    format.setRenderableType(QSurfaceFormat::OpenGL);
    QSurfaceFormat::setDefaultFormat(format);
    

六、完整工程结构

UVC_Capture/
├── Src/
│   ├── main.cpp
│   ├── mainwindow.cpp
│   └── videoprocessor.cpp
├── Res/
│   └── mainwindow.ui
├── UVC_Capture.pro
└── CMakeLists.txt

参考代码 QT 捕获UVC摄像头,枚举摄像头设备,预览显示图像,拍照等 www.youwenfan.com/contentcnj/69957.html

七、调试技巧

  1. 设备状态监控

    qDebug() << "可用设备数:" << QCameraInfo::availableCameras().count();
    qDebug() << "当前分辨率:" << m_camera->viewfinderSettings().resolution();
    
  2. 帧率测试

    QElapsedTimer timer;
    timer.start();
    // 统计每秒帧数
    qDebug() << "实时帧率:" << 1000/timer.elapsed() << "FPS";
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年10月17日信息公布:太阳能路灯厂家最新推荐榜~覆盖乡村户外、单臂双臂、农村及5-8米LED款,精选优质路灯企业

摘要 随着城市化进程加速和智慧城市建设推进,路灯行业在2025年迎来新一轮发展高潮,市场需求持续增长,产品技术不断升级。本文基于行业数据、用户口碑和专家评审,为您呈现最新路灯品牌排行榜单,旨在帮助工程采购商…

基于Java+Springboot+Vue开发的新闻管理系统源码+运行步骤

项目简介该项目是基于Java+Springboot+Vue开发的新闻管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习…

Linux 环境变量与软件安装

Linux 环境变量与软件安装 环境变量 环境变量是 Linux 系统中定义的动态参数,用于指定系统或应用程序的运行路径、配置信息等,其中 PATH 变量 是最核心的环境变量之一,决定了系统在哪些目录下查找可执行指令。 环境…

Python 将多个DataFrame合并到一个Excel工作表的sheet中有几种方法

在Python中,将多个DataFrame合并到一个Excel工作表的sheet中有几种方法。以下是常见的几种实现方式: 方法1:直接合并DataFrame后保存import pandas as pd# 示例数据 df1 = pd.DataFrame({A: [1, 2, 3], B: [4, 5, 6…

基于ZigBee的无线传感器组网

一、实验设备与工具设备类型 型号/参数 功能说明主控芯片 CC2530F256 集成ZigBee射频与8051内核传感器模块 DHT11温湿度传感器 采集环境参数网关设备 USB-ZigBee适配器 实现PC与ZigBee网络通信开发环境 IAR Embedded W…

2025 涂料供应厂家最新推荐榜:权威品牌测评 + 选购指南,家装工程选品必看

2025 年涂料行业迎来技术迭代与品牌洗牌,消费者对环保性、功能性的需求从基础达标升级为精准适配,零 VOC、净醛抗菌、耐候定制等高端需求占比同比提升 30%。但市场中既有深耕多年的实力企业,也有缺乏核心技术的跟风…

2025 年中走丝线切割源头厂家最新推荐排行榜发布,解读优质厂家技术亮点与选择攻略伺服/高效/自动中走丝线切割厂家推荐

引言当前工业制造领域中,中走丝线切割设备作为模具制造、汽车零部件加工、精密器械生产等关键行业的核心装备,其质量与性能直接决定企业生产效率与产品精度。但市场上源头厂家数量繁杂,实力差距悬殊,部分厂家缺乏核…

2024浙江省省赛决赛wp

rce `<?php echo "get只接受code欧,flag在上一级目录<br>"; $filename = __FILE__; highlight_file($filename); if(isset($_GET[code])){ if (!preg_match(/session_id\(|readfile…

【解决办法】pytorch OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败”

一、出现背景 使用marker-pdf报错:pytorch OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败” 二、可能原因及其解决办法 1. dll没有安装或者有问题 用dll修复工具尝试安装修复dll,一些免费的工具,如:金山…

23省赛初赛

23质量比24高我只能说 easy php 简单反序列化__debuginfo()魔术方法打印所需调试信息,反序列化时候执行! 链子如下: BBB::__debuginfo()->CCC::__toString()->AAA::__call() AI运行代码 php EXP: <?php …

2025年苏州保洁服务公司最新权威推荐榜:专业家政与深度清洁口碑优选,覆盖日常保洁、开荒保洁、深度清洁及企业保洁服务

行业背景与发展趋势随着城市化进程加速和生活水平提升,中国保洁服务行业正迎来前所未有的发展机遇。据行业数据显示,2024年中国家政服务市场规模已突破1.5万亿元,年均增长率保持在15%以上。这一增长态势不仅反映了市…

2025 年快速退火炉优质厂家最新推荐榜单:真空 / 半导体 / 晶圆 / 高温 / 桌面 / 半自动 / 全自动 / 芯片 / 硅片 / RTP 设备企业权威评选

引言当前,3C、半导体、光伏、汽车等下游产业高速发展,对快速退火炉的精度、稳定性、节能性等需求持续升级,然而市场上设备厂家数量繁杂,产品质量差异显著,部分企业缺乏核心技术,导致设备性能不稳定,难以满足高精…

2025 年油罐厂家最新推荐榜:sf 双层 / 加油站 / 化工 / 不锈钢 / 地埋 / 卧式 / 立式油罐优质厂商权威盘点,帮您避开选择误区精准选品

当前工业与能源存储领域对油罐的需求持续攀升,然而市场上油罐品牌繁杂,产品质量、技术水平与服务能力差异显著,从小型家用油罐到大型工业储罐,不同场景对油罐的材质、容量、安全性能要求各不相同,消费者在选择时常…

2025 年立体画厂家最新推荐榜单:涵盖 3D 光栅立体画、立体光栅卡、3D 装饰立体画、三维立体画,助企业与消费者精准挑选优质品牌

当前,立体画行业发展迅猛,市场上产品种类日益丰富,涵盖 3D 光栅立体画、立体光栅卡等多个品类,但同时也面临品牌杂乱、质量参差不齐的问题。企业在广告宣传、产品包装等场景选择立体画时,难以辨别品牌优劣;消费者…

2025 最新高低温试验箱厂家推荐榜:优质厂家推荐,含恒温恒湿设备供应商核心实力解析

高低温试验箱作为工业研发与质量检测的核心设备,其性能直接关系到电子、汽车、航空航天等关键领域的产品可靠性。2025 年环境试验设备市场竞争加剧,品牌数量激增但实力参差不齐,部分企业因技术匮乏导致设备精度不足…

Luogu P10027 梦境世界 题解 [ 蓝 ] [ 多维 DP ]

梦境世界:可爱 DP 题。 一种常见的假做法是在 DP 的过程中记录路径的前驱进行转移,这种做法错误的原因并不在于转移存在环,它其实就是一张 DAG,但是这种状态表示方式并不能推导出前驱的前驱是谁,所以才是假的。 考…

winserver文件备份到minio

winserver开启 WSMan PS C:\Users\Administrator> Enable-PSRemoting -Force PS C:\Users\Administrator> Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.,17.1.0." -Force PS C:\U…

完整教程:「2025秋招季」AI简历筛选如何破解海选难题?

完整教程:「2025秋招季」AI简历筛选如何破解海选难题?2025-10-17 08:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …

F1分数(F1-score)

* { margin: 0; padding: 0; box-sizing: border-box } body { font-family: "Microsoft YaHei", "Arial", sans-serif; background: linear-gradient(135deg, rgba(102, 126, 234, 1) 0, rgba(11…

教你把未分配的磁盘合并到C盘或者D盘?如何把未分配的硬盘空间分配到另一个磁盘?Windows 11,如何将未分配的磁盘分配给 C 盘?怎么把未分配的磁盘合并到d盘

基本上几步就能学会,先来看看,大概的思路就是:如果多余的盘存在,则需要删除这个磁盘券;扩展需要合并的盘;把需要合并的盘合并进来就完成了。我有几个盘,但其中一个盘我想合并到D盘中,合并到C盘也是一样的道理,…