C++ Opencv 蓝图01(进阶版)
目录
先导约定(贯穿每周)
Week 0|项目 0:Qt+OpenCV 通用桌面脚手架
Week 1|项目 1:多源采集与录像器(本地/USB/RTSP)
Week 2|项目 2:图像增强工作台(批处理)
Week 3|项目 3:相机标定与畸变矫正
Week 4|项目 4:运动目标检测与追踪(安防入门)
Week 5|项目 5:特征点拼接与全景生成
Week 6|项目 6:移动端文档扫描仪(桌面版)
Week 7|项目 7:工业零件表面缺陷检测(传统方法)
Week 8|项目 8:人脸检测与关键点(合规演示)
Week 9|项目 9:通用目标检测(YOLO/ONNX)
Week 10|项目 10:多摄像头 RTSP 矩阵与回放
Week 11|项目 11:多目标跟踪与计数(SORT/OC‑SORT)
Week 12|项目 12:条码/二维码/工单识别
Week 13|项目 13:车道线与车牌基础管线(经典+轻量 DNN)
Week 14|项目 14:零售客流分析平台(热力图/停留)
Week 15|项目 15(Capstone):“可配置视觉平台”产品化
能力地图与递进关系
工程化要点(强烈建议边做边固化)
通用 CMake 与代码骨架(节选)
学习与数据建议
如何使用这份计划
先导约定(贯穿每周)
-
工具链:C++20、CMake ≥ 3.22、Qt 6(或 5)、OpenCV 4.x(含 contrib)、vcpkg/conan、spdlog、fmt、yaml-cpp、GoogleTest、OpenMP(或 TBB)、Git。
-
工程底座(通用)
-
目录:
app/ (Qt UI),core/ (cv 算法管线),io/ (Camera/RTSP/文件),models/ (DNN),configs/,data/,tests/,scripts/,cmake/ -
通用能力:日志(spdlog)、配置(YAML)、参数化 pipeline、单元测试、基准测试、Crash 日志与异常兜底、打包(CPack 或 windeployqt/macdeployqt)、CI(本地 GitHub Actions 模板)。
-
-
标准周节奏
-
D1 启动会/PRD & 设计;D2 数据/IO/可视化骨架;D3 核心算法 baseline;D4 与 Qt UI 联调;D5 测试与指标;D6 打包与文档 Demo;D7 复盘沉淀。
-
-
通用验收线(每周)
-
可运行的 GUI/CLI 可执行文件 + 样例配置;≥ 5 个单元测试;README(含依赖、运行、性能、Known Issues);可重现的输入/输出;关键指标(FPS/精度/延迟/内存)明示。
-
Week 0|项目 0:Qt+OpenCV 通用桌面脚手架
场景:后续所有项目的基座
目标:一键拉起摄像头/读图、左侧参数面板、中心预览、右侧日志;YAML 配置与日志滚动;最小单元测试框架
关键技术:CMake+vcpkg、Qt Widgets/Concurrent、OpenCV core/highgui/imgproc、spdlog、yaml-cpp、GTest
任务清单:
-
初始化仓库与 CMake Presets;2) 第三方依赖接入;3)
cv::Mat ↔ QImage转换;4) 视频帧获取与异步刷新(QThread/QtConcurrent); -
YAML 配置读取与参数热更新;6) spdlog 日志滚动与级别;7) 示例测试(I/O 与配置);8) CPack 打包或 windeployqt。
交付物/验收:启动 1s 内;本地/USB 摄像头 720p 预览 ≥ 25 FPS;崩溃不丢日志;README 可一键跑通。
Mat → QImage提示:BGR→RGB、步长对齐、8UC1/3/4 分支,避免拷贝(QImage(data, w,h, step, Format)+ 深拷贝时机)。
Week 1|项目 1:多源采集与录像器(本地/USB/RTSP)
场景:企业视频前端采集与证据留存
目标:支持文件/USB/RTSP;预览、截图、录像、时间水印
关键技术:VideoCapture/VideoWriter、环形缓冲、断线重连
任务:多源统一抽象;RTSP 心跳与重连;可选择编码(MJPG/H264);时间/ROI 水印;异常弹窗与重试策略;写入性能基准。
验收:1080p 文件写入 ≥ 20 FPS;RTSP 断线自动恢复(≤5s);录像文件分段切片(大小/时长)。
Week 2|项目 2:图像增强工作台(批处理)
场景:质检/文档/医学预处理
目标:滤波、去噪、锐化、对比度(CLAHE)、批量处理与前后对比
关键:imgproc 滤波、直方图、批处理队列、多线程
任务:可插拔 Filter 接口;参数热更新;目录批处理与进度条;处理前后对比视图;处理缓存(避免重复);性能日志。
验收:处理 500 张 2MP 图像< 90s;参数变动立即生效;导出报告(CSV/JSON)。
Week 3|项目 3:相机标定与畸变矫正
场景:工业相机、机器手臂、AR
目标:棋盘格标定、内参外参求解、实时矫正
关键:calib3d(findChessboardCorners、calibrateCamera、undistort)
任务:标定数据采集与质量评分;YAML 存储;实时 undistort 预览;ROI 保真;畸变后渲染裁剪策略。
验收:重投影误差 ≤ 0.5~0.8 像素;1080p 实时矫正 ≥ 25 FPS。
Week 4|项目 4:运动目标检测与追踪(安防入门)
场景:看护/周界/异常闯入
目标:背景建模+前景掩膜+轮廓/质心跟踪
关键:BackgroundSubtractorMOG2/KNN、形态学、CSRT/KCF Tracker
任务:动态阈值与阴影抑制;最小外接矩形与轨迹;ROI 掩膜;误报抑制(面积/持续帧数);告警截图与录像。
验收:静态场景误报 ≤ 3/min;延迟 ≤ 200ms;总吞吐 720p ≥ 25 FPS。
Week 5|项目 5:特征点拼接与全景生成
场景:地图/展厅/巡检记录
目标:自动拼接与曝光补偿,导出大图
关键:ORB/SIFT 特征、Stitcher、RANSAC、羽化融合
任务:多图读入→配准→裁剪→融合;失败重试策略;重叠区检测;拼接质量评分(匹配内点率)。
验收:5 张 12MP 照片拼接≤ 15s;接缝可见度评分< 阈值;失败有可读原因。
Week 6|项目 6:移动端文档扫描仪(桌面版)
场景:合同/票据入库
目标:透视校正、背景去除、二值化、OCR
关键:边缘/轮廓、四点透视、Otsu、自适应阈值、Tesseract/(或集成第三方 OCR)
任务:页面检测与矫正;批量导入/导出 PDF;文本区域高亮;语言包管理;字段后处理(正则)。
验收:A4 扫描 OCR 字符正确率 ≥ 90%(清晰样本);批量 200 页处理< 5 分钟。
Week 7|项目 7:工业零件表面缺陷检测(传统方法)
场景:金属/塑料件划痕、污渍
目标:图像均一化→阈值/纹理→缺陷区域→出报告
关键:光照补偿、形态学、filter2D/LBP、连通域过滤
任务:采集基线与良品模板;区域特征(面积/长宽比/纹理能量);OK/NOK 判定与批量报表;可视化染色图。
验收:良品误检率 ≤ 2%;NOK 检出率 ≥ 95%(自建小数据集);吞吐 ≥ 10 张/秒(2MP)。
Week 8|项目 8:人脸检测与关键点(合规演示)
场景:门禁/访客流量统计(学习用)
目标:DNN 人脸检测 + 5 关键点;基础遮挡/口罩鲁棒
关键:OpenCV DNN(ONNX 模型加载)、NMS、几何对齐
任务:模型加载与推理;批量图片/摄像头;隐私遮挡(打码/遮脸);处理日志与抽样留存;合规提示(本地处理、授权采集)。
验收:720p 实时 ≥ 20 FPS(CPU)或 ≥ 30 FPS(可用 GPU/OpenVINO 可选);误检/漏检样例分析页。
合规提醒:仅限授权、测试环境;提供“隐私模式”开关与数据最小化选项。
Week 9|项目 9:通用目标检测(YOLO/ONNX)
场景:仓储/安防/工厂多类检测
目标:加载通用检测模型,完成推理、可视化与指标评估
关键:OpenCV DNN、预后处理(归一化、NMS、尺度还原)、多线程流水线
任务:ONNX 模型配置化;Batch/Stream 两种入口;NMS/置信度可调;COCO 子集评估(mAP@0.5);性能剖析(吞吐/延迟)。
验收:1080p 单流实时 ≥ 20 FPS(CPU 优化后或轻量模型);评估脚本能复现实验结果。
Week 10|项目 10:多摄像头 RTSP 矩阵与回放
场景:门店/产线/园区
目标:多路并行拉流、自动重连、网格墙显示、回看
关键:连接池、异步 I/O、环形缓冲(最近 N 分钟)、时间戳对齐
任务:多路并发安全与限流;延迟监控;磁盘配额管理;一键导出最近 X 分钟视频;断网/恢复策略。
验收:8 路 720p 稳定预览;单路丢包场景自动恢复;平均延迟 ≤ 300ms。
Week 11|项目 11:多目标跟踪与计数(SORT/OC‑SORT)
场景:客流/车流统计
目标:检测→跟踪→越线计数→报表
关键:卡尔曼滤波、匈牙利匹配、IOU/NMS、越线逻辑
任务:与 Week 9 模型对接;轨迹管理与 ID 重置;越线区域编辑;CSV/SQLite 落库;日报/周报可视化。
验收:检测+跟踪稳定 ID 保持率 ≥ 80%;计数误差 ≤ ±5%。
Week 12|项目 12:条码/二维码/工单识别
场景:仓储/产线追溯
目标:一体化扫码(多标准)+ OCR 辅助
关键:ZXing-cpp 集成、图像增强、定位框稳定
任务:动/静态扫码;弱光/模糊增强;批量目录识别;识别质量得分;与工单号校验(正则/校验位)。
验收:常见码制识别率 ≥ 98%;均值响应 ≤ 100ms/张。
Week 13|项目 13:车道线与车牌基础管线(经典+轻量 DNN)
场景:园区/停车场
目标:车道线(Canny+Hough/多项式拟合)+ 车牌检测/识别
关键:ROI 透视、颜色/边缘融合、轻量检测模型 + OCR
任务:白天/夜晚两套参数集;车速/方向约束;输出车牌列表与时间戳;误报抑制。
验收:白天检测率 ≥ 95%,夜间 ≥ 85%;误报率 ≤ 3%。
Week 14|项目 14:零售客流分析平台(热力图/停留)
场景:零售/展馆
目标:检测+跟踪→轨迹→停留/热力图
关键:栅格热力图、轨迹聚类、匿名化(只保留轨迹)
任务:多 ROI;停留阈值与热力渲染;日/周/月报;导出 PNG/PDF;数据匿名策略与可开关。
验收:多 ROI 计数/停留曲线稳定;24h 持续运行无内存泄漏(valgrind/ASan 过检)。
Week 15|项目 15(Capstone):“可配置视觉平台”产品化
场景:把以上能力“拼装”为企业可落地的小平台
目标:模块化插件(采集/前处理/模型/后处理/可视化/存储),一体化安装包
关键:插件接口(抽象类+工厂)、配置模板库、健康检查、崩溃重启、日志采集、Release 版调优
任务:
-
架构:可插拔 Pipeline(JSON/YAML 描述图),热加载;
-
运维:日志分级、旋转、指标上报(本地 CSV/Prom 格式);
-
体验:向导式配置、模板(安防/质检/客流);
-
质量:自动化测试矩阵(Win/Linux)、打包脚本、版本号/变更日志。
验收: -
30 分钟内从零到“某模板”可运行;
-
关键路径 ≥ 25 FPS(1080p 单流);
-
崩溃自动拉起;
-
文档齐全(安装、使用、排障、二开指南)。
能力地图与递进关系
-
I/O 与可视化(W0–W2)→ 几何/标定(W3)→ 检测/跟踪/分割(W4–W7)→ DNN 推理(W8–W11)→ 行业管线(W12–W14)→ 产品化(W15)
工程化要点(强烈建议边做边固化)
-
性能基线:统一测速宏与统计(FPS/延迟/CPU/内存);关键算子加
cv::setNumThreads/UMat或 OpenMP。 -
稳定性:所有 I/O 包装重试与超时;RTSP 断线→指数回退;异常栈写入日志。
-
可配置:所有阈值/模型/路径/编码放入 YAML,并提供“导入/导出配置”按钮。
-
测试:图像 Golden‐file 对比、数值近似断言;DNN 前后处理边界值;CI 只跑轻量用例。
-
可观测:日志 + 指标(CSV/Prom),Debug 叠加调试层(框、轨迹、掩膜)。
-
安全与合规:隐私数据默认本地化,遮挡/匿名化选项,用户授权记录。
通用 CMake 与代码骨架(节选)
cmake_minimum_required(VERSION 3.22)
project(cvqt_base LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent)
find_package(OpenCV REQUIRED)
find_package(spdlog REQUIRED)
find_package(yaml-cpp REQUIRED)
find_package(GTest REQUIRED)add_executable(vision_appapp/main.cppapp/MainWindow.cppcore/Pipeline.cppio/VideoSource.cpp
)
target_link_libraries(vision_appPRIVATE Qt6::Widgets Qt6::Concurrent ${OpenCV_LIBS} spdlog::spdlog yaml-cpp GTest::gtest)
// Mat ↔ QImage (节选)
static QImage matToQImage(const cv::Mat& m){switch (m.type()) {case CV_8UC1: return QImage(m.data,m.cols,m.rows,int(m.step),QImage::Format_Grayscale8).copy();case CV_8UC3: {cv::Mat rgb; cv::cvtColor(m, rgb, cv::COLOR_BGR2RGB);return QImage(rgb.data,rgb.cols,rgb.rows,int(rgb.step),QImage::Format_RGB888).copy();}case CV_8UC4: return QImage(m.data,m.cols,m.rows,int(m.step),QImage::Format_ARGB32).copy();default: return {};}
}
学习与数据建议
-
数据:自采摄像头、公开小数据集(COCO 子集/自建样本)、RTSP 测试流、本地图片/视频。
-
参考(不强依赖):OpenCV 官方文档/示例、Qt 文档、CMake/CTest、GoogleTest、spdlog/yaml-cpp 说明。
-
建立项目模板仓库:每周以模板为分支起点,收敛通用代码(I/O、日志、配置、UI 控件、指标面板)。
如何使用这份计划
-
每周按“标准周节奏”推进;严格产出“交付物/验收”项。
-
若时间不足,可把 Week 8–11 的 DNN 项目穿插到行业周(12–14)中,以保证体验与产出。
-
Capstone(Week 15)把你最感兴趣的两三项能力拼成可演示的“视觉小平台”(更贴近企业交付)。
如果你告诉我目标行业(如工业质检/零售/安防/交通/文档处理)、目标平台(Windows/Linux)以及可用硬件(CPU/GPU/工业相机/分辨率/帧率),我可以把第 12–15 周的模板、指标与打包方式进一步细化成“准生产级”的方案与参数。
