力学笃行(示例1)QGraphicsView显示相机图像

news2025/1/5 3:50:15

示例1 QGraphicsView显示相机图像

  • 1. 步骤概述
  • 2. 具体应用
    • 2.1 配置pro文件
    • 2.2 相机类的封装
    • 2.3 GraphicsView类的封装
    • 2.4 mainwindow主窗口
  • 3. 实际效果

1. 步骤概述

在 C++ 和 Qt 中使用 OpenCV 打开笔记本相机并在窗口中显示视频流,你需要创建一个专门的相机类来处理相机的初始化、视频捕获和显示。这个相机类可以使用 Qt 提供的 QGraphicsView来显示视频流,并使用 OpenCV 的 cv::VideoCapture 来处理相机输入。

步骤概述

  1. 创建一个 Qt 项目,并将 OpenCV 库链接到项目。
  2. 创建一个相机类,负责打开相机、捕获图像等。
  3. 创建一个 QGraphicsView 类,负责显示图像。
  4. 在主窗口中调用相机类、GraphicsView类来显示视频流。

示例工程目录按照以下结构存放:

D:/QTExample/CameraVideoDisplayDemo/
│
├── 3rd/                         # 第三方库路径
│   └── opencv/                  # opencv库
│
├── src/                         # 源代码
│   ├── main.cpp                 # 主函数
│   ├── graphicsview.cpp         # 图形视图类源文件
│   ├── graphicsview.h           # 图形视图类头文件
│   ├── mainwindow.cpp           # 主窗口类源文件
│   ├── mainwindow.h             # 主窗口类头文件
│   ├── cameracapture.cpp        # 相机捕获类源文件
│   ├── cameracapture.h          # 相机捕获类头文件
│   └── ICamera.h                # 相机接口类头文件
│
├── build/                       # 最终的可执行文件输出目录
│   ├── CameraVideoDisplayDemo/  # 编译文件存放目录(由项目名称生成)
│   │   └── CameraVideoDisplayDemo.exe  # 生成的可执行文件
│   └── tempobj/                 # 编译过程文件
│       ├── moc/                 # MOC 文件
│       ├── ui/                  # UI  文件
│       └── rcc/                 # RCC 文件
│
└── CameraVideoDisplayDemo.pro   # 项目的.pro文件

2. 具体应用

2.1 配置pro文件

pro文件配置

TARGET = CameraVideoDisplayDemo  # 这里可以设置你希望的可执行文件名称
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= console  # 移除控制台配置

QT += core gui widgets  # 添加 Qt 的核心、GUI 和 widgets 模块

# 添加源文件
SOURCES += \
        graphicsview.cpp \
        main.cpp \
        mainwindow.cpp \
        cameracapture.cpp
HEADERS += \
        graphicsview.h \
        mainwindow.h \
        ICamera.h \
        cameracapture.h
FORMS += \
        mainwindow.ui

# 添加三方库
THIRD_PARTY_PATH = $$PWD/3rd # 定义3rd路径

# OpenCV库
INCLUDEPATH += $$THIRD_PARTY_PATH/opencv/include
LIBS += -L$$THIRD_PARTY_PATH/opencv/lib/
LIBS += -lopencv_world490  # 这是 OpenCV 4.x 的合并库,如果你使用单独的模块,替换为适当的库名

# 设置输出目录
DESTDIR = ./$$TARGET #设置exe存放目录  # 设置可执行文件的输出目录
# 设置临时编译文件的目录(例如用于对象文件、MOC文件等)
OBJECTS_DIR = ./tempObj      # 设置临时编译文件存放的目录
MOC_DIR     = $$OBJECTS_DIR/moc  # 设置 MOC 生成文件存放的目录
UI_DIR      = $$OBJECTS_DIR/ui   # 设置 UI 文件生成目录
RCC_DIR     = $$OBJECTS_DIR/rcc  # 设置 RCC 文件生成目录

2.2 相机类的封装

CameraCapture.h头文件

#ifndef CAMERACAPTURE_H
#define CAMERACAPTURE_H

#include "ICamera.h"
#include <opencv2/opencv.hpp>

class CameraCapture : public ICamera {
   
public:
    CameraCapture();
    ~CameraCapture();

    bool IsOpened() override;
    bool Open() override;
    bool Close() override;
    bool SetAutoExposure(bool bAuto) override;
    bool GetExposureRange(float* fmin, float* fmax) override;
    bool SetExposure(float exp) override;
    float GetExposure() override;
    bool GetGainRange(int* imin, int* imax) override;
    bool SetGain(int gain) override;
    int GetGain() override;
    bool CalcWhitebalance(float* r, float* g, float* b) override;
    bool SetWhitebalance(float r, float g, float b) override;
    bool GetSize(int* w, int* h) override;
    bool GetImage(unsigned char* img, int w, int h) override;

private:
    cv::VideoCapture cap;  // OpenCV 的视频捕获对象
    cv::Mat currentFrame;  // 当前帧图像
    bool autoExposure;     // 自动曝光状态
    float exposureTime;    // 曝光时间
    

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

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

相关文章

ruoyi 分页 查询超出后还有数据; Mybatis-Plus 分页 超出后还有数据

修改&#xff1a;MybatisPlusConfig 类中 分页合理化修改为&#xff1a;paginationInnerInterceptor.setOverflow(false);

Unity中实现转盘抽奖效果(二)

如果要使转盘停止时转到到指定位置&#xff0c;应该如何做&#xff1f; 实现思路&#xff1a; 也就是在需要停止的分数的区间范围内&#xff0c;随机一个角度值&#xff0c;然后反推需要在哪个角度开始减速&#xff0c;如果转盘的当前角度和需要开始减速的角度有差值&#xf…

苍穹外卖04——Redis初入门 在店铺打烊or营业状态管理功能中的使用

Redis入门 redis简介 它以键值对的形式存储数据在内存中,并且以极高的性能和灵活性而著称,通常用于缓存、消息代理以及持久化数据。 - 基于内存存储,读写性能高- 适合存储热点数据(热点商品、资讯、新闻)- 企业应用广泛Windows版下载地址:https://github.com/microsoft…

深度学习每周学习总结R2(RNN-天气预测)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客R5中的内容&#xff0c;为了便于自己整理总结起名为R2&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. RNN介绍a. 什么是 RNN&#xff1f;RNN 的一般应用场景 b. 传统 RNN …

CUDA与Microsoft Visual Studio不兼容问题

简介&#xff1a;在安装一些 python库时&#xff0c;涉及到第三方库&#xff08;特别是需要引用 C 代码&#xff09;时&#xff0c;通常的安装方式会涉及到编译过程&#xff0c;通常称为"源代码安装"&#xff08;source installation&#xff09;&#xff0c;或是 “…

WordPress网站中如何修复504错误

504网关超时错误是非常常见的一种网站错误。这种错误发生在上游服务器未能在规定时间内完成请求的情况下&#xff0c;对访问者而言&#xff0c;出现504错误无疑会对访问体验大打折扣&#xff0c;从而对网站的转化率和收入造成负面影响。 504错误通常源于服务器端或网站本身的问…

Springboot 升级带来的Swagger异常

当升级到Springboot 2.6.0 以上的版本后&#xff0c;Swagger 就不能正常工作了, 启动时报如下错误。当然如果你再使用sping boot Actuator 和 Springfox, 也会引起相关的NPE error. (github issue: https://github.com/springfox/springfox/issues/3462) NFO | jvm 1 | 2022/04…

发现API安全风险,F5随时随地保障应用和API安全

分析数据显示&#xff0c;目前超过90%的基于Web的网络攻击都以API端点为目标&#xff0c;试图利用更新且较少为人所知的漏洞&#xff0c;而这些漏洞通常是由安全团队未主动监控的API所暴露。现代企业需要一种动态防御策略&#xff0c;在风险升级成代价高昂、令人警惕且往往无法…

【数据结构】(Python)差分数组。差分数组与树状数组结合

差分数组&#xff1a; 基于原数组构造的辅助数组。用于区间修改、单点查询。区间修改的时间复杂度O(1)。单点查询的时间复杂度O(n)。差分数组的元素&#xff1a;第一个元素等于原数组第一个元素&#xff0c;从第二个元素开始是原数组对应下标的元素与前一个元素的差&#xff0…

12.30-1-5学习周报

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 文章链接摘要Abstract一、方法介绍1.HAT-CIR2.Horde3.DWGRNet 二、实验总结 文章链接 https://arxiv.org/pdf/2405.04101 摘要 本博客介绍了论文《Continual lea…

Android OpenGl(二) Shader

一、Shader 1、什么是Shader&#xff0c;为什么要使用Shder &#xff08;1&#xff09;shader运行在gpu上的小程序 &#xff08;2&#xff09;以前使用固定管线&#xff0c;但缺点是灵活度不够&#xff0c;无法满足复杂需求&#xff0c;为了解决固定管线的缺点&#xff0c;出…

【LeetCode】200、岛屿数量

【LeetCode】200、岛屿数量 文章目录 一、并查集1.1 并查集1.2 多语言解法 二、洪水填充 DFS2.1 洪水填充 DFS 一、并查集 1.1 并查集 // go var sets int var father [90000]intfunc numIslands(grid [][]byte) int {n, m : len(grid), len(grid[0])build(grid, n, m)for i …

[最佳方法] 如何将视频从 Android 发送到 iPhone

概括 将大视频从 Android 发送到 iPhone 或将批量视频从 iPhone 传输到 Android 并不是一件容易的事情。也许您已经尝试了很多关于如何将视频从 Android 发送到 iPhone 15/14 的方法&#xff0c;但都没有效果。但现在&#xff0c;通过本文中的这 6 种强大方法&#xff0c;您可…

MetaRename for Mac,适用于 Mac 的文件批量重命名工具

在处理大量文件时&#xff0c;为每个文件手动重命名既耗时又容易出错。对于摄影师、设计师、开发人员等需要频繁处理和整理文件的专业人士来说&#xff0c;找到一款能够简化这一过程的工具是至关重要的。MetaRename for Mac 就是这样一款旨在提高工作效率的应用程序&#xff0c…

QEMU网络配置简介

本文简单介绍下qemu虚拟机网络的几种配置方式。 通过QEMU的支持&#xff0c;常见的可以实现以下4种网络形式&#xff1a; 基于网桥&#xff08;bridge&#xff09;的虚拟网络。基于NAT&#xff08;Network Addresss Translation&#xff09;的虚拟网络。QEMU内置的用户模式网…

Elasticsearch向量检索需要的数据集以及768维向量生成

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一&#xff1a;使用fromsize实现分页 快速掌握Elasticsearch检索之二&#xff1a;滚动查询(scrool)获取全量数据(golang) Elasticsearch检索之三&#xff1a;官方推荐方案search_after…

MySQL:安装配置(完整教程)

这里写目录标题 一、MySQL 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1 初始化 MySQL5.2 启动 MySQL 服务 六、修改 MySQL 密码七、卸载 MySQL八、结语 一、MySQL 简介 MySQL 是一款广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;…

您的公司需要小型语言模型

当专用模型超越通用模型时 “越大越好”——这个原则在人工智能领域根深蒂固。每个月都有更大的模型诞生&#xff0c;参数越来越多。各家公司甚至为此建设价值100亿美元的AI数据中心。但这是唯一的方向吗&#xff1f; 在NeurIPS 2024大会上&#xff0c;OpenAI联合创始人伊利亚…

如何用CSS3创建圆角矩形并居中显示?

在网页设计中&#xff0c;圆角矩形因其美观和现代感而被广泛使用&#xff0c;居中显示元素也是一个常见的需求。今天&#xff0c;我们将学习如何使用CSS3的border-radius属性来创建圆角矩形&#xff0c;并将其居中显示在页面上。 如果你正在学习CSS&#xff0c;那么这个实例将非…

PhPMyadmin-cms漏洞复现

一.通过日志文件拿Shell 打开靶场连接数据库 来到sql中输入 show global variables like %general%; set global general_logon; //⽇志保存状态开启&#xff1b; set global general_log_file D:/phpstudy/phpstudy_pro/WWW/123.php //修改日志保存位置 show global varia…