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.mzph.cn/news/778541.shtml

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

相关文章

CMS(内容管理系统)

一、系统的编写可以在开源网站上下载一个相关项目&#xff0c;然后做2次开发 企业建站系统:MetInfo(米拓)、蝉知、SiteServer CMs等; B2C商城系统:商派Shopex、ECshop、HiShop、XpShop等; 门户建站系统:DedeCMS(织梦)、帝国CMS、PHPCMS、动易、CmsTop等; 博客系统:WordPres…

Elasticsearch是什么及作用

初识Elasticsearch 一、Elasticsearch是什么&#xff1f; es是款强大的开源搜索技术&#xff0c;具备非常多强大的功能&#xff0c;能够帮助我们开发人员从海量数据中快速找到需要的内容。例如在GitHub上搜索代码&#xff0c;在jd、tb网站中搜索商品、在baidu中搜索答案。 二、…

人才测评系统 提升HR招聘和人岗管理

人才是一个企业的核心竞争力。商业社会的激烈竞争和种种挑战&#xff0c;实际上都是人才的竞争。企业的招聘&#xff0c;职位调动&#xff0c;晋升&#xff0c;人岗匹配的核心对象都是人。现如今&#xff0c;越来越多的企业引入了人才测评机制&#xff0c;但是一些HR却出现不理…

Uibot6.0 (RPA财务机器人师资培训第5天 ) 报销汇总机器人案例实战

训练网站&#xff1a;泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https…

华为广告打包报错,问题思考

华为广告打包时报错 fata日志不一样能反映出完整的错误日志信息&#xff0c;仅看fata日志具有误导性&#xff0c;有可能指向错误的方向。 通过看完整的日志可见&#xff0c;错误的原因为 Caused by: java.lang.ClassNotFoundException: com.huawei.hms.ads.base.R$dimenfata日…

SDKMAN多版本SDK并行管理工具

一、简介 SDKMAN是管理多个SDK并行版本的工具&#xff0c;它提供了方便的命令行界面&#xff08;CLI&#xff09;和API&#xff0c;用于列出&#xff0c;安装&#xff0c;切换和删除候选对象。此外&#xff0c;它还为我们设置了环境变量。 它还允许开发人员安装基于JVM的SDK&…

2024/03/28(C++·day4)

一、思维导图 二、练习题 1、写出三种构造函数&#xff0c;算术运算符、关系运算符、逻辑运算符重载尝试实现自增、自减运算符的重载 #include <iostream>using namespace std;// 构造函数示例 class MyClass { private:int data; public:// 默认构造函数MyClass() {da…

Elasticsearch从入门到精通-07ES底层原理学习

Elasticsearch从入门到精通-07ES底层原理和高级功能 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是程序员行走的鱼 &#x1f4d6; 本篇主要介绍和大家一块学习一下ES底层原理包括集群原理、路由原理、分配控制、分配原理、文档分析原理、文档并发安全原理以及一些高…

嵌入式学习44-哈希算法和排序算法

Hash 哈希算法&#xff1a; 在记录的 存储位置 和它的 关键字 之间建立一种去特定的对应关系&#xff0c;使得每个关键字key对应一个存储位置&#xff1b; 查找时&#xff0c;根据确定的对应关系&#xff0c;找到给定的 key 的映射。 记录的存储位置 f&a…

win10 pe制作(官纯,危); git proxy; nvme win7 ; 机械革命极光Z驱动; win7x64 shineLon驱动

win10 pe制作(官纯&#xff0c;危险) 下载 https://learn.microsoft.com/zh-cn/windows-hardware/get-started/adk-install#download-the-adk-for-windows-11 https://go.microsoft.com/fwlink/?linkid2243390 https://go.microsoft.com/fwlink/?linkid2243391 安装 adkw…

Tensorflow2.0笔记 - metrics做损失和准确度信息度量

本笔记主要记录metrics相关的内容&#xff0c;详细内容请参考代码注释&#xff0c;代码本身只使用了Accuracy和Mean。本节的代码基于上篇笔记FashionMnist的代码经过简单修改而来&#xff0c;上篇笔记链接如下&#xff1a; Tensorflow2.0笔记 - FashionMnist数据集训练-CSDN博…

SAP BTP云上一个JVM与DB Connection纠缠的案例

前言 最近在CF (Cloud Foundry) 云平台上遇到一个比较经典的案例。因为牵扯到JVM &#xff08;app进程&#xff09;与数据库连接两大块&#xff0c;稍有不慎&#xff0c;很容易引起不快。 在云环境下&#xff0c;有时候相互扯皮的事蛮多。如果是DB的问题&#xff0c;就会找DB…

DDos系列攻击原理与防御原理

七层防御体系 静态过滤 命中黑名单 对确定是攻击的流量直接加入黑名单&#xff08;源地址命中黑名单直接丢弃&#xff0c;缺乏机动性和扩展性&#xff09; 畸形报文过滤 畸形报文攻击 TCP包含多个标记位&#xff0c;排列组合有规律 • 现象&#xff1a;TCP标记位全为1 …

docker:在ubuntu中运行docker容器

前言 1 本笔记本电脑运行的ubuntu20.04系统 2 docker运行在ubuntu20.04系统 3 docker镜像使用的是ubuntu18.04&#xff0c;这样拉的 docker pull ubuntu:18.04 4 docker容器中运行的是ubuntu18.04的系统&#xff0c;嗯就是严谨 5 这纯粹是学习笔记&#xff0c;实际上没啥价值。…

指纹浏览器是什么?有哪些好用的推荐?

在网络世界中&#xff0c;保护您的在线隐私和安全非常重要。反检测浏览器是专门为此诞生的工具&#xff0c;旨在通过更改浏览器指纹来帮助您做到这一点&#xff0c;它们使网站、广告商和其他人很难跟踪您的在线行为。 一、什么是反检测浏览器&#xff1f; 您是否想过网站如何检…

C++万物起源:类与对象(二)

一、类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f; 并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员 函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;…

篮球论坛系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 目录 1. …

Linux根据时间删除文件或目录

《liunx根据时间删除文件》和 《Linux 根据时间删除文件或者目录》已经讲述了根据时间删除文件或目录的方法。 下面我做一些补充&#xff0c;讲述一个具体例子。以删除/home目录下的文件为例。 首先通过命令&#xff1a; ls -l --time-style"%Y-%m-%d %H:%M:%S"…

Redis、Mysql双写情况下,如何保证数据一致

Redis、Mysql双写情况下&#xff0c;如何保证数据一致 场景谈谈数据一致性三个经典的缓存模式Cache-Aside Pattern读流程写流程 Read-Through/Write-Through&#xff08;读写穿透&#xff09;Write behind &#xff08;异步缓存写入&#xff09; 操作缓存的时候&#xff0c;删除…

【tensorflow框架神经网络实现鸢尾花分类】

文章目录 1、数据获取2、数据集构建3、模型的训练验证可视化训练过程 1、数据获取 从sklearn中获取鸢尾花数据&#xff0c;并合并处理 from sklearn.datasets import load_iris import pandas as pdx_data load_iris().data y_data load_iris().targetx_data pd.DataFrame…