QT中的摄像头显示与拍照

一、思路

1.1 摄像头图像捕捉

QT中摄像头的使用首先想到的是Camera,在帮助手册里面查询可以看到QCamera的类。

添加对应的模块multimedia与类<QCamera>,然后查看QCamera的使用。

有详细的例子,例子中能发现新的类型QCameraInfo,其实在QT中后面是info的类几乎都是前面的详细数据的类,例如类似的QFile和QFileInfo等等。看例子不难看出构建QCamera对象需要先确定摄像头,即先确定摄像头驱动来指定特定的摄像头。

添加相应模块与类,看手册中的描述

这个就很详细了,甚至可以直接粘贴复制。首先availableCamera确定可获取的摄像头驱动,然后判断哪个驱动是自己用的,并且创建摄像头对象,最后如果要使用摄像头的详细信息,可以创建QCameraInfo(自己选择的摄像头对象)的对象来获取相应信息。

现在摄像头对象就创建完成。再看下摄像头的处理动作:

动作有很多,我们简单讲下能使用摄像头功能的动作就行,其他动作可以自己摸索玩玩。

首先start和stop对应的是摄像头打开和关闭,到了这其实已经OK了。但是我们摄像头的不做内容还没内有根ui界面关联,所以需要用viewfinder来显示画面。它的类型是QCameraViewfinder,我们再用手册查下这个类型。

添加相应类型。

看详细信息,将摄像头的捕获图像放进QCameraViewfinder的对象,再显示出来。

这样,摄像头的显示就已经完成,可以调试下运行看到一个摄像头捕捉的实时图像。

1.2 摄像头拍照

摄像头拍照需要用到QCameraImageCapture的类,看名字就知道是什么意思,camera相机,image图片,capture捕获。

添加相应类和模块。

详细描述中可以直接复制过去使用,1.1我们摄像头能正常捕获图像了,现在使用QCameraViewfinder的对象中的capture方法即可捕获图片。

可以看出capture方法可以添加图片保存路径,编辑路径,拍照功能完成。下面分享下代码

二、代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QCameraViewfinder>
#include <QCamera>
#include <QCameraInfo>
#include <QDebug>
#include <QCameraImageCapture>
#include <QDateTime>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_starCamera_clicked();void on_pushButton_stopCamera_clicked();void on_pushButton_photo_clicked();private:Ui::MainWindow *ui;QCamera* myCamera;QCameraInfo* cameraInfo;QCameraViewfinder* viewfinder;QCameraImageCapture* imageCapture;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//查询可获取的摄像头名称const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();for (const QCameraInfo &cameraInfo : cameras){qDebug() << cameraInfo.deviceName();if (cameraInfo.deviceName() == "@device:pnp:\\\\?\\usb#vid_32e6&pid_d112&mi_00#6&1f7b3c11&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global"){//构建指定摄像头对象myCamera = new QCamera(cameraInfo);}}/***********查询摄像头信息*********///构建指定摄像头信息对象cameraInfo = new QCameraInfo(*myCamera);/********************************///摄像头模式选择myCamera->setCaptureMode(QCamera::CaptureStillImage);//摄像头显示viewfinder = new QCameraViewfinder(ui->verticalLayoutWidget);myCamera->setViewfinder(viewfinder);viewfinder->resize(ui->verticalLayoutWidget->size());viewfinder->show();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_starCamera_clicked()
{//开启摄像头myCamera->start();
}void MainWindow::on_pushButton_stopCamera_clicked()
{//关闭摄像头myCamera->stop();
}void MainWindow::on_pushButton_photo_clicked()
{//构建相机静态图像捕获对象imageCapture = new QCameraImageCapture(myCamera);//相机画面锁定myCamera->searchAndLock();//捕获图片保存QDateTime time = QDateTime::currentDateTime();//获取当前时间QString name = time.toString("yy-MM-dd hh-mm-ss");//将当前时间格式化imageCapture->capture("C:/Users/EDY/Desktop/QTtest/camera/" + name  + ".jpg");//相机画面恢复myCamera->unlock();
}

源码已上传

三、运行视频

camera

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

nacos的安装

一、Nacos的下载与安装 1、下载地址和版本 下载地址&#xff1a;github.com/alibaba/nacos 下载版本&#xff1a;nacos-server-1.1.0.tar.gz或nacos-server-1.1.0.zip&#xff0c;解压任意目录即可 2、nacos的启动 Linux/Unix/Mac 启动命令&#xff1a;sh startup.sh -m s…

MYSQL-7.内存

内存 Mysql的内存结构 大体可分为四个板块&#xff1a;mysql工作组件、线程本地内存、mysql共享内存、存储引擎缓冲区&#xff1b; Mysql server工作组件 对应着mysql架构图中的组件层&#xff1a; Mysql在启动时&#xff0c;会将这些工作组件初始化到内存中&#xff1b; …

比selenium体验更好的ui自动化测试工具: cypress介绍

话说 Cypress is a next generation front end testing tool built for the modern web. And Cypress can test anything that runs in a browser.Cypress consists of a free, open source, locally installed Test Runner and a Dashboard Service for recording your tests.…

LinuxWindows 日志分析 陇剑杯

sql注入分析 题目 access.logsql注入分析1 小明的网站被人注入了&#xff0c;还好有日志&#xff0c;请你帮他分析分析&#xff0c;利用附件回答sql注入分析1-3 sql注入分析-1&#xff1a; 黑客在注入过程中采用的注入手法叫_____________。&#xff08;格式为4个汉字&…

【资讯】Linux 2024-03-10 发布 V6.8 版本--Git对象即将超过1000万

关键信息&#xff1a; 发布时间&#xff1a;2024-03-10 13:38:09 -0700发布Tag名&#xff1a;v6.8Tag链接&#xff1a;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tag/?hv6.8邮件列表&#xff1a;https://lkml.org/lkml/2024/3/10/243 发布链接快照…

人工智能驱动的生产力手册(一)

原文&#xff1a;The AI-Powered Productivity Handbook 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 人工智能&#xff08;AI&#xff09;简介 “你在一个迷宫般的曲折小通道中。” - 庞大洞穴冒险 AI 简介 - 由 Midjourney AI 生成的图像 AI 及其应用概述 什么…

PTA L2-045 堆宝塔

堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小&#xff0c;按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下&#xff1a; 首先准备两根柱子&#xff0c;一根 A 柱串宝塔&#xff0c;一根 B 柱用于临时叠放。把第 1 块彩虹圈…

适用于车载设备无钥匙进入系统汽车用晶振FA-238A

汽车用晶振FA-238A是一款适用于车载设备无钥匙进入系统的耐高温晶振。汽车用晶振FA-238A是爱普生推出一的款MHz表贴式晶体单元&#xff0c;具有很好的预率性能&#xff0c;符合AEC-0200标准&#xff0c;其封装尺寸仅为3.2x2.5x0.7mm&#xff0c;工作温度范围在-40℃~125℃之间&…

[Linux]进程间通信—管道通信

1.进程通信简介 首先两个进程之间是不可以直接进行"数据"的传递的&#xff0c;因为进程具有独立性。 1.1进程通信的目的&#xff1a; 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&…

深入理解ThreadLocal原理

目录 1- 什么是ThreadLocal &#xff1f;2- ThreadLocal的作用&#xff1f;ThreadLocal实现线程间资源隔离ThreadLocal实现线程内资源共享 3- ThreadLocal 原理3-1 ThreadLocalMap3-2 ThreadLocalMap的扩容&#x1f511;1. 为什么会发生扩容&#xff1f;&#x1f511;2. Thread…

蓝奏云直链获取在线解析网站源码

源码简介 蓝奏云直链获取在线解析网站源码 蓝奏云链接解析 本地API接口 支持有无密码和短期直链和永久直链&#xff0c;同时还可以显示文件名和大小。 这个解析器无需数据库即可搭建&#xff0c;API接口已经本地化&#xff0c;非常简单易用。 安装环境 php5.6 搭建教程 …

Vue3:Pinia简介及环境搭建

一、简介 Pinia是Vue3中的状态管理工具&#xff0c;类似与Vue2中的Vuex框架的作用 二、环境搭建 1、安装 npm install pinia2、配置 main.ts import {createApp} from vue import App from ./App.vue // 第一步&#xff1a;引入pinia import {createPinia} from piniacons…

多模态学习实战手册:读懂CompassRank榜单的评测指标!

1. 前言 榜单链接:CompassRank CompassRank 是一个中立且全面的性能榜单,作为大模型评测体系 OpenCompass2.0 中各类榜单的承载平台。它覆盖多领域、多任务下的模型性能,并定期更新,以提供动态的行业洞察。 CompassRank 保持中立性,不受任何商业利益干扰,并依托于 Com…

HarmonyOS 应用开发之数据可靠性与安全性数据库备份与恢复

概述 功能场景 在系统运行中&#xff0c;存储损坏、存储空间不足、文件系统权限、系统掉电等都可能导致数据库发生故障。比如联系人应用的数据库损坏&#xff0c;导致用户的联系人丢失&#xff1b;日历应用的数据库损坏&#xff0c;导致丢失日历提醒等。为此数据管理提供了数…

使用Vue实现CSS过渡和动画

01-初识动画和过渡 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>使用vue实现css过渡和动画&l…

前段之JavaScript——网页的血液!!

目录 一、JavaScript简介 二、JavaScript引入 三、声明变量 四、数据类型 五、运算符 六、函数 七、常用数据操作方法 1、字符串 2、数组 3、对象 八、BOM 九、DOM 一、JavaScript简介 JavaScript是一种用于为网页添加交互功能的脚本语言。它是一种轻量级的、解释…

element-ui avatar 组件源码分享

今日简单分享 avatar 组件的源码实现&#xff0c;主要从以下四个方面&#xff1a; 1、avatar 组件页面结构 2、avatar 组件属性 3、avatar 组件事件 4、avatar 组件 slot 一、avatar 组件页面结构 二、avatar 组件属性 2.1 icon 属性&#xff0c;设置头像的图标类型&…

Java学习笔记(24)

网络编程 Java.net 软件架构 CS BS 三要素 IP 端口号 协议 IP IPv4 没有负数&#xff0c;每组范围是0~255 数量不到43亿个 IPv6 解决IP不够用 128位&#xff0c;分成8组 现在怎么解决IP不够用的问题&#xff1f; 利用局域网IP解决 共享一个公网IP&#xff0c;再有路…

【Linux】Vim编辑器

专栏文章索引&#xff1a;Linux 目录 在Vim编辑器中&#xff0c;一个Tab键相当于几个空格&#xff1f; 在Vim编辑器中&#xff0c;一个Tab键相当于几个空格&#xff1f; 在Vim编辑器中&#xff0c;默认情况下&#xff0c;一个Tab键相当于8个空格。 这是Vim的默认设置&#x…

基于springboot+vue+Mysql的教学视频点播系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…