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

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;    // 曝光时间
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小老鼠不吃猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值