Skip to content

edgecv 教程系列:从零手搓一个现代 C++ 计算机视觉库

edgecv v1.0.0 | C++20 | OpenCV 4.x

本系列教程会带着你从零开始,一步一步把 edgecv 这个库写出来。我们会按照项目实际开发的迭代顺序推进——先搭骨架,再铺基础设施,最后组装高级特性。每一章都会告诉你"为什么这么做",而不仅仅是"怎么做"。

阅读顺序

章节之间有依赖关系,建议按下面的顺序阅读:

前言 ch00
  |
  v
ch01 项目骨架 ──+──> ch02 像素格式 ──+──> ch04 Image/View ──+──> ch05 算法:颜色/IO
                 |                    |                       |         |
                 +──> ch03 Expected ──+───────────────────────+──> ch06 算法:滤波/边缘
                                                              |
                                                              v
                                                        ch07 Pipeline
                                                              |
                                                              v
                                                        ch08 Qt 桥接

章节列表

章节内容份量
ch00 前言edgecv 的动机、设计哲学、最终产物总览轻量
ch01 项目骨架CMake 构建系统、目录结构、首次编译通过中等
ch02 像素格式编译期类型标签、concept、bytes_size中等
ch03 Expected从零手搓 expected<T, E>,含单子操作重量级
ch04 Image/ViewImage<F>、ImageView<F>、ImageBuilder<F>重量级
ch05 算法:颜色/IO算法封装模式、颜色转换、加载保存中等
ch06 算法:滤波/边缘滤波、边缘检测、几何变换、阈值、归一化中等
ch07 Pipelineoperator| 组合链、make_pipeline、错误短路中等
ch08 Qt 桥接cv::Mat 与 QImage 零拷贝互转轻量

补课文档

如果你对某些 C++ 特性不够熟悉,正文里遇到时会提示你去看对应的补课文档。这些文档互相独立,随时翻阅即可:

文档覆盖内容
C++20 Conceptsconcept 定义、requires 子句与表达式
Expected 与单子式错误处理Expected<T,E> 设计思路、and_then 铁路模型
非拥有视图与 std::span拥有 vs 借用语义、const 视图与可变视图
编译期计算constexpr / consteval / static_assert
模板元编程模式type traits、if constexpr、变参模板
RAII 与 move 语义RAII、移动语义、rule of five、placement new

约定

  • 每章内部按 sprint 式分步推进,每步包含:目标说明、代码、验证方法、踩坑预警
  • 代码按逻辑功能段展示,逐步讲解,不会一上来贴一大坨
  • 编译验证命令默认使用 cmake -B build && cmake --build build
  • 测试验证命令默认使用 ctest --test-dir build

环境要求

  • C++20 编译器(GCC 12+ / Clang 15+ / MSVC 19.28+)
  • CMake 3.22+
  • OpenCV 4.x(core、imgproc、imgcodecs 模块)
  • 可选:Qt 6.x 或 Qt 5.12+(桥接模块)

Built with VitePress