C++ Opencv 蓝图01(进阶版)

目录

先导约定(贯穿每周)

[Week 0|项目 0:Qt+OpenCV 通用桌面脚手架](#Week 0|项目 0:Qt+OpenCV 通用桌面脚手架)

[Week 1|项目 1:多源采集与录像器(本地/USB/RTSP)](#Week 1|项目 1:多源采集与录像器(本地/USB/RTSP))

[Week 2|项目 2:图像增强工作台(批处理)](#Week 2|项目 2:图像增强工作台(批处理))

[Week 3|项目 3:相机标定与畸变矫正](#Week 3|项目 3:相机标定与畸变矫正)

[Week 4|项目 4:运动目标检测与追踪(安防入门)](#Week 4|项目 4:运动目标检测与追踪(安防入门))

[Week 5|项目 5:特征点拼接与全景生成](#Week 5|项目 5:特征点拼接与全景生成)

[Week 6|项目 6:移动端文档扫描仪(桌面版)](#Week 6|项目 6:移动端文档扫描仪(桌面版))

[Week 7|项目 7:工业零件表面缺陷检测(传统方法)](#Week 7|项目 7:工业零件表面缺陷检测(传统方法))

[Week 8|项目 8:人脸检测与关键点(合规演示)](#Week 8|项目 8:人脸检测与关键点(合规演示))

[Week 9|项目 9:通用目标检测(YOLO/ONNX)](#Week 9|项目 9:通用目标检测(YOLO/ONNX))

[Week 10|项目 10:多摄像头 RTSP 矩阵与回放](#Week 10|项目 10:多摄像头 RTSP 矩阵与回放)

[Week 11|项目 11:多目标跟踪与计数(SORT/OC‑SORT)](#Week 11|项目 11:多目标跟踪与计数(SORT/OC‑SORT))

[Week 12|项目 12:条码/二维码/工单识别](#Week 12|项目 12:条码/二维码/工单识别)

[Week 13|项目 13:车道线与车牌基础管线(经典+轻量 DNN)](#Week 13|项目 13:车道线与车牌基础管线(经典+轻量 DNN))

[Week 14|项目 14:零售客流分析平台(热力图/停留)](#Week 14|项目 14:零售客流分析平台(热力图/停留))

[Week 15|项目 15(Capstone):"可配置视觉平台"产品化](#Week 15|项目 15(Capstone):“可配置视觉平台”产品化)

能力地图与递进关系

工程化要点(强烈建议边做边固化)

[通用 CMake 与代码骨架(节选)](#通用 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
任务清单

  1. 初始化仓库与 CMake Presets;2) 第三方依赖接入;3) cv::Mat ↔ QImage 转换;4) 视频帧获取与异步刷新(QThread/QtConcurrent);

  2. 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
目标 :棋盘格标定、内参外参求解、实时矫正
关键calib3dfindChessboardCornerscalibrateCameraundistort
任务 :标定数据采集与质量评分;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)

工程化要点(强烈建议边做边固化)

  1. 性能基线 :统一测速宏与统计(FPS/延迟/CPU/内存);关键算子加 cv::setNumThreads/UMat 或 OpenMP。

  2. 稳定性:所有 I/O 包装重试与超时;RTSP 断线→指数回退;异常栈写入日志。

  3. 可配置:所有阈值/模型/路径/编码放入 YAML,并提供"导入/导出配置"按钮。

  4. 测试:图像 Golden‐file 对比、数值近似断言;DNN 前后处理边界值;CI 只跑轻量用例。

  5. 可观测:日志 + 指标(CSV/Prom),Debug 叠加调试层(框、轨迹、掩膜)。

  6. 安全与合规:隐私数据默认本地化,遮挡/匿名化选项,用户授权记录。


通用 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_app
  app/main.cpp
  app/MainWindow.cpp
  core/Pipeline.cpp
  io/VideoSource.cpp
)
target_link_libraries(vision_app
  PRIVATE 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 周的模板、指标与打包方式进一步细化成"准生产级"的方案与参数。

相关推荐
present12276 小时前
一段音频/视频分离成人声与伴奏,Windows + Anaconda 快速跑通 Spleeter(离线可用)
windows·职场和发展·ffmpeg·音视频·娱乐·媒体
omnibots7 小时前
瑞萨SDK编译linux时,make menuconfig报错
linux·服务器·前端·嵌入式硬件
Java 码农7 小时前
linux shell 数组
linux·运维·服务器
大梦谁先觉i7 小时前
Linux 磁盘空间“消失”之谜:文件已删,空间却不释放?
linux·运维·服务器
序属秋秋秋7 小时前
《Linux系统编程之开发工具》【编译器 + 自动化构建器】
linux·运维·服务器·c语言·c++·自动化·编译器
带土18 小时前
32. 文件IO (3) 文件缓冲区与同步机制
linux
打不了嗝 ᥬ᭄8 小时前
传输层协议UDP
linux·网络·网络协议·udp
小涂8 小时前
在Linux(deepin-community-25)下安装MongoDB
linux·运维·mongodb
洛克大航海8 小时前
Linux 中如何查看系统的位数
linux·ubuntu