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/View | Image<F>、ImageView<F>、ImageBuilder<F> | 重量级 |
| ch05 算法:颜色/IO | 算法封装模式、颜色转换、加载保存 | 中等 |
| ch06 算法:滤波/边缘 | 滤波、边缘检测、几何变换、阈值、归一化 | 中等 |
| ch07 Pipeline | operator| 组合链、make_pipeline、错误短路 | 中等 |
| ch08 Qt 桥接 | cv::Mat 与 QImage 零拷贝互转 | 轻量 |
补课文档
如果你对某些 C++ 特性不够熟悉,正文里遇到时会提示你去看对应的补课文档。这些文档互相独立,随时翻阅即可:
| 文档 | 覆盖内容 |
|---|---|
| C++20 Concepts | concept 定义、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+(桥接模块)