# 基于 OpenCV 的设备状态视觉监测系统 **Repository Path**: itqilin/OpenCV_Power ## Basic Information - **Project Name**: 基于 OpenCV 的设备状态视觉监测系统 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-17 - **Last Updated**: 2026-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenCV_Power:基于 OpenCV 的设备状态视觉监测系统 ## 1. 项目简介 本项目面向电力、工控设备巡检场景,使用 **C++ + Qt + OpenCV** 实现设备状态视觉监测 Demo。系统通过摄像头采集设备画面,完成: - 摄像头实时采集; - 图像预处理; - 指针式仪表表盘定位、指针检测、读数换算; - 数字字符区域分割与简化识别; - 指示灯颜色与亮灭状态识别; - 异常告警; - 结果表格展示; - SQLite 日志保存; - 截图保存。 > 说明:这是一个可运行的课程设计/简历项目骨架。真实现场项目需要根据设备面板图片调整 ROI、阈值、表盘角度标定和字符识别模型。 ## 2. 项目结构 ```text OpenCV_Power/ ├── OpenCV_Power.pro # Qt qmake 工程文件 ├── CMakeLists.txt # CMake 工程文件 ├── main.cpp ├── mainwindow.h/.cpp # Qt 主界面 ├── core/ │ ├── CameraWorker.* # 摄像头采集线程 │ ├── Preprocessor.* # 灰度化、滤波、CLAHE、阈值、形态学 │ ├── PointerMeterReader.* # 指针仪表识别 │ ├── DigitReader.* # 数字字符识别骨架 │ ├── IndicatorReader.* # 指示灯颜色/亮灭识别 │ ├── AlarmManager.* # 告警判断 │ ├── ResultLogger.* # SQLite 结果保存 │ └── VisionPipeline.* # 视觉算法管道 ├── config/monitor_config.json ├── data/init.sql ├── logs/ ├── photos/ └── README.md ``` ## 3. 功能说明 ### 3.1 摄像头采集 `CameraWorker` 使用 `cv::VideoCapture` 打开摄像头,并运行在 `QThread` 中,避免 UI 卡顿。 ### 3.2 仪表识别 `PointerMeterReader` 的处理流程: 1. BGR 转灰度; 2. 高斯滤波降噪; 3. `HoughCircles` 定位圆形表盘; 4. `Canny` + `HoughLinesP` 检测指针线段; 5. 计算指针角度; 6. 按量程线性映射为仪表读数。 读数公式: ```text value = minValue + (angle - thetaMin) * (maxValue - minValue) / (thetaMax - thetaMin) ``` ### 3.3 字符识别 `DigitReader` 当前实现了: - ROI 灰度化; - Otsu 二值化; - 轮廓提取; - 字符框按 x 坐标排序; - 简化七段数码管识别。 如果用于真实项目,建议替换为: - 模板匹配; - KNN/SVM; - OCR; - CNN 分类模型。 ### 3.4 指示灯识别 `IndicatorReader` 将 ROI 转换到 HSV 空间,对红、绿、黄颜色范围进行阈值分割,并结合亮度判断: - 红色 / 绿色 / 黄色; - 亮 / 灭。 ### 3.5 告警与日志 `AlarmManager` 支持: - 仪表读数越限告警; - 状态灯熄灭告警; - 红色指示灯告警。 `ResultLogger` 使用 SQLite 保存识别结果。 ## 4. 编译方式 ### 方式一:Qt Creator 打开 qmake 工程 1. 打开 Qt Creator; 2. 选择 `OpenCV_Power.pro`; 3. 配置 Qt Kit; 4. 修改 `.pro` 中 OpenCV 路径: ```pro OPENCV_DIR = D:/opencv/build LIBS += -L$$OPENCV_DIR/x64/vc16/lib -lopencv_world480 ``` 其中 `opencv_world480` 要根据你的 OpenCV 版本修改,例如: - OpenCV 4.5.5:`opencv_world455` - OpenCV 4.8.0:`opencv_world480` - OpenCV 4.9.0:`opencv_world490` 5. 构建并运行。 ### 方式二:CMake ```bash cd E:/OpenCV_Power mkdir build cd build cmake .. cmake --build . --config Release ``` ## 5. 运行效果 运行后界面包含: - 左侧实时画面; - 右侧控制参数; - 仪表读数; - 字符读数; - 指示灯状态; - 异常告警; - 底部历史记录表格。 点击 **启动监测** 后,程序会打开默认摄像头。点击 **保存截图** 会把当前处理后的画面保存到 `photos/`。 ## 6. 后续可改进方向 - 增加鼠标框选 ROI 功能; - 从 `config/monitor_config.json` 动态读取参数; - 增加图片/视频文件输入; - 改进仪表刻度自动标定; - 字符识别替换为 SVM/CNN/OCR; - 增加外观异常检测,如锈蚀、破损、污渍; - 增加历史查询界面和报表导出; - 增加 TCP/Modbus/串口联动。 ## 7. 简历描述 **基于 OpenCV 的设备状态视觉监测系统|C++ / Qt / OpenCV / SQLite** - 面向电力、工控设备巡检场景,开发设备状态视觉监测系统,实现仪表读数、字符读数、指示灯状态识别与异常告警; - 使用 OpenCV 完成摄像头采集、灰度化、高斯滤波、阈值分割、边缘检测、霍夫圆/直线检测; - 通过霍夫圆定位仪表盘,通过霍夫直线提取指针,并根据角度与量程映射计算仪表读数; - 对数字字符区域进行 ROI 分割、轮廓提取、字符排序和简化识别; - 对指示灯 ROI 进行 HSV 颜色分割,判断红/绿/黄以及亮灭状态; - 基于 Qt 实现实时图像显示、参数配置、异常告警、截图保存和历史记录展示; - 使用 QThread 解耦摄像头采集与 UI 显示,使用 SQLite 保存监测日志。