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

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

示例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.kler.cn/a/464144.html

相关文章:

  • Java对象创建过程与类加载机制
  • 科技查新测试基础知识分享
  • REMARK-LLM:用于生成大型语言模型的稳健且高效的水印框架
  • 【无重复字符的最长子串】
  • C语言中的强弱符号
  • QT----------QT Data Visualzation
  • idea( 2022.3.2)打包报错总结
  • 电子病历四级视角下SQL语句的优化策略与实践用例研究
  • nmap探测网络基础服务
  • 探索Composable Architecture:小众但高效的现代框架技术
  • 简易CPU设计入门:本系统中的通用寄存器(五)
  • 数据防泄漏中我们应该着重关注哪些点呢?
  • Cypress测试框架详解:轻松实现端到端自动化测试!
  • driftingblues2
  • 从零用java实现 小红书 springboot vue uniapp (7)im 在线聊天功能 关注功能
  • 常见硬件及其对应的驱动模块列表
  • [极客大挑战 2019]Knife1
  • 实际开发中,常见pdf|word|excel等文件的预览和下载
  • JUnit注解,枚举
  • 利用Java爬虫获取1688店铺详情:一篇详细的技术指南