OpenCV (开源计算机视觉库:http://opencv.org) 是一个开源库,它包含了几百个计算机视觉算法。学习 OpenCV 库最权威的资料无疑就是 OpenCV 的官方文档了。
OpenCV 官方提供的文档比较齐全,这些文档主要有两种形式,一是教程,就像书或文章一样,会以 OpenCV 的某个模块或接口为主题,较为详细地说明基本原理,OpenCV 的 API 用法,并提供示例代码和说明;二是 API 参考,会逐个类逐个函数接口的进行说明。要学习 OpenCV,教程形式的官方文档无疑是最好的选择;但日常开发中,一时想不起来某个函数接口的签名及语义,想不起来某个类有哪些函数接口,则翻找 API 参考形式的官方文档更好。
这里梳理一下 OpenCV 官方文档的组织结构,让我们可以对 OpenCV 提供了什么有一个大概的了解,同时又能为我们队 OpenCV 的学习提供一个路线图。
在 OpenCV 官方网站中,库的 Releases 页面 列出了 OpenCV 各个版本的一些关键信息,如源码的下载链接,对应版本的 GitHub 链接,不同操作系统平台的二进制安装包下载链接等,当然也包括文档入口的链接。
这里以当前最新的发行版 4.5.5 为例,看一下OpenCV 官方文档的组织结构。
OpenCV 4.5.5 版文档的入口页面位于 https://docs.opencv.org/4.5.5/,这个页面的组织如下:
- 介绍
- OpenCV 教程
- OpenCV-Python 教程
- OpenCV.js 教程
- contrib 模块教程
- 经常问的问题 (FAQ)
- 参考文献
- 主要模块:
- core. 核心功能
- imgproc. 图像处理
- imgcodecs. 图像文件读取和写入
- videoio. 视频 I/O
- highgui. 高级 GUI
- video. 视频分析
- calib3d. 相机校准和 3D 重建
- features2d. 2D 特征框架
- objdetect. 目标检测
- dnn. 深度神经网络模块
- ml. 机器学习
- flann. 多维空间中的聚类和搜索
- photo. 计算摄影
- stitching. 图像拼接
- gapi. 图形 API
- 额外模块:
- alphamat. Alpha 遮罩
- aruco. ArUco标记检测
- barcode. 条码检测和解码方法
- bgsegm. 改进的背景-前景分割方法
- bioinspired. 受生物启发的视觉模型和衍生工具
- ccalib. 用于 3D 重建的自定义校准模式
- cudaarithm. 矩阵运算
- cudabgsegm. 背景分割
- cudacodec. 视频编码/解码
- cudafeatures2d. 特征检测和描述
- cudafilters. 图像过滤
- cudaimgproc. 图像处理
- cudalegacy. 传统支持
- cudaobjdetect. 目标检测
- cudaoptflow. 光流
- cudastereo. 立体声对应
- cudawarping. 图像变形
- cudev. 设备层
- cvv. 用于计算机视觉程序交互式可视化调试的 GUI
- datasets. 处理不同数据集的框架
- dnn_objdetect. 用于目标检测的 DNN
- dnn_superres. 用于超分辨率的 DNN
- dpm. 基于可变形零件的模型
- face. 人脸分析
- freetype. 使用 freetype/harfbuzz 绘制 UTF-8 字符串
- fuzzy. 基于模糊数学的图像处理
- hdf. 分层数据格式 I/O 例程
- hfs. 用于高效图像分割的分层特征选择
- img_hash. 该模块带来了不同图像散列算法的实现。
- intensity_transform. 该模块实现了强度变换算法来调整图像对比度。
- julia. OpenCV 的 Julia 绑定
- line_descriptor. 从图像中提取的线的二进制描述符
- mcc. 麦克白图表模块
- optflow. 光流算法
- ovis. OGRE 3D 可视化器
- phase_unwrapping. 相位展开 API
- plot. Mat 数据的绘图函数
- quality. 图像质量分析 (IQA) API
- rapid. 基于轮廓的 3D 目标跟踪
- reg. 图像配准
- rgbd. [RGB深度处理]. some other he(https://docs.opencv.org/4.5.5/d2/d3a/group__rgbd.html)
- saliency. 显着性 API
- sfm. 运动结构
- shape. 形状距离和匹配
- stereo. 立体声匹配算法
- structured_light. 结构光 API
- superres. 超分辨率
- surface_matching. 表面匹配
- text. 场景文本检测与识别
- tracking. 追踪 API
- videostab. 视频稳定
- viz. 3D 可视化器
- wechat_qrcode. 微信二维码检测器,用于检测和解析二维码。
- xfeatures2d. 额外的 2D 特征框架
- ximgproc. 扩展图像处理
- xobjdetect. 扩展目标检测
- xphoto. 其它 照片处理算法
OpenCV 官方文档的组成包括一份介绍文档(介绍),4 个教程(OpenCV 教程、OpenCV-Python 教程、OpenCV.js 教程 和 contrib 模块教程),一份 FAQ 文档(经常问的问题 (FAQ)),一份参考资料文档(参考文献),以及主要模块和额外模块的 API 参考。
主要模块和额外模块的 API 参考,适合用来在开发过程中检索各个模块的 API,对于学习,这些文档会显得非常枯燥且让人迷惑。
参考资料文档(参考文献)包含了许多参考文献的说明,其中一部分有网页链接。这份文档作为查找扩展阅读材料的入口有一定价值。
介绍文档(介绍)包含对 OpenCV 整个项目的结构,以及 API 概念的说明,学习 OpenCV 必读材料。
contrib 模块教程)的质量有点参差不齐,其中不同模块的教程,其繁简程度也大为不同,有些非常简略,有些则很详细。对于要学习还没有进入正式版的 contrib 模块的同学,还是非常有价值的。
OpenCV 官方提供的三份教程是针对不同平台学习 OpenCV 的绝佳材料。OpenCV 教程 对 OpenCV 的主要数据结构,主要概念,及各个模块的 API 都有着很详细的说明,示例代码主要用 C++ 编程语言。
OpenCV-Python 教程 为 Python 开发者提供了关于 OpenCV 的详尽介绍。
OpenCV.js 教程 则为 JavaScript 开发者提供了关于 OpenCV 的详尽介绍。
OpenCV 教程 的内容
OpenCV 官方提供的三份教程中,OpenCV 教程 值得好好学习一下,另两份教程则可以根据自己所用的开发语言选择是深入学习,还是弃之不用。
这里再看下 OpenCV 教程 的主要内容:
- OpenCV 介绍 - 在你的计算机上构建和安装 OpenCV
- 核心功能 (core 模块) - 这个库的基本构造块
- 图像处理 (imgproc 模块) - 图像处理功能
- 应用程序实用工具 (highgui,imgcodecs,videoio 模块) - 应用程序实用工具 (GUI,图像/视频 输入/输出)
- 相机校准和 3D 重建 (calib3d 模块) - 从 2D 图像中提取 3D 世界信息
- 2D 特征框架 (feature2d 模块) - 特征探测器,描述符和匹配框架
- 深度神经网络 (dnn 模块) - 使用内置 dnn 模块推断神经网络
- 图 API (gapi 模块) - 基于图的计算机视觉算法构建方法
- 其它教程 (ml,objdetect,photo,stitching,video) - 其它模块 (ml,objdetect,photo,stitching,video)
- OpenCV iOS - 在一个 iDevice 上运行 OpenCV
- GPU 加速的计算机视觉 (cuda 模块) - 利用显卡的能力运行 CV 算法
OpenCV 教程 的 OpenCV 介绍 部分,非常详细地介绍了为各种各样的平台搭建 OpenCV 开发环境的过程。OpenCV 教程 的其余部分,则分模块介绍 OpenCV 的各项功能。
OpenCV 教程 的 OpenCV 介绍 部分的内容如下:
- OpenCV 安装概述
- OpenCV 配置选项参考
Linux
- 在 Linux 中安装 OpenCV
- 将 OpenCV 与 gdb 驱动的 IDE 结合使用
- 将 OpenCV 与 gcc 和 CMake 一起使用
- 将 OpenCV 与 Eclipse (插件 CDT) 一起使用
Windows
- 在 Windows 中安装 OpenCV
- 如何在 “Microsoft Visual Studio” 中使用 OpenCV 构建应用程序
- Image Watch:在 Visual Studio 调试器中查看内存中的图像
Java & Android
- Java 开发简介
- 在 Eclipse 中使用 OpenCV Java
- 使用 Clojure 开发 OpenCV 应用简介
- Android 开发简介
- OpenCV4Android SDK
- 使用 OpenCV 进行 Android 开发
- 在基于 Android 相机预览的 CV 应用中使用 OpenCL
其它平台
- 在 MacOS 中安装 OpenCV
- 为基于 ARM 的 Linux 系统交叉编译 OpenCV
- 使用 CUDA 为 Tegra 构建 OpenCV
- 在 iOS 中安装 OpenCV
基础用法
- 图像入门 - 我们将学习如何从文件中加载图像,并使用 OpenCV 显示它
杂项
- 为 OpenCV 编写文档 - 这份教程描述了新文档的写作过程,及一些有用的 Doxygen 特性。
- 过渡指南 guide - 这份文档描述了 2.4 -> 3.0 的转换过程的一些方面。
- 从其它的 Doxygen 工程交叉引用 OpenCV - 本文档概述了如何从其他 Doxygen 项目创建对 OpenCV 文档的交叉引用。
OpenCV 教程 的 OpenCV 介绍 部分对于开发环境搭建过程的详细说明,无疑是我们学习 OpenCV 过程中绕不过去的第一步的宝贵参考。
OpenCV-Python 教程 的内容
当前 Python 在 AI 和计算机视觉领域应用广泛,OpenCV-Python 教程 对于 Python 计算机视觉学习和开发的同学极具价值。这里看一下这份教程的内容:
-
OpenCV 介绍
学习如何在计算机上搭建 OpenCV-Python 开发环境!
-
OpenCV 中的 Gui 功能
在这里,我们将学习如何显示和保存图像和视频、控制鼠标事件和创建轨迹栏。的第一步的宝贵
-
核心操作
在本节中,我们将学习图像的基本操作,如像素编辑、几何变换、代码优化、一些数学工具等。的第一步的宝贵
-
OpenCV 中的图像处理
在这一节,我们将学习 OpenCV 中不同的图像处理功能。
-
特征探测和描述
在本节中,我们将了解特征探测器和描述符
-
视频分析 (video 模块)
在本节中,我们将学习使用对象跟踪等视频的不同技术。
-
相机校准和 3D 重建
在本节中,我们将学习相机校准、立体成像等。
-
机器学习
在本节中,我们将学习 OpenCV 中不同的机器学习功能。
-
计算摄影
在本节中,我们将学习不同的计算摄影技术,例如图像去噪等。
-
目标探测 (objdetect 模块)
在本节中,我们将学习目标检测技术,例如人脸检测等。
-
OpenCV-Python 绑定
在本节中,我们将看一下 OpenCV-Python 绑定是如何生成的。
这份教程的结构与 OpenCV 教程 的结构类似,其中的 OpenCV 介绍 部分同样介绍了开发环境搭建,其余各部分介绍 OpenCV 的各个模块。
OpenCV-Python 教程 的 OpenCV 介绍 部分内容如下:
-
OpenCV-Python 教程介绍
OpenCV-Python 入门
-
在 Windows 中安装 OpenCV-Python
在 Windows 中搭建 OpenCV-Python 开发环境
-
在 Fedora 中安装 OpenCV-Python
在 Fedora 中搭建 OpenCV-Python 开发环境
-
在 Ubuntu 中安装 OpenCV-Python
在 Ubuntu 中搭建 OpenCV-Python 开发环境
基于官方文档的 OpenCV 学习路线图
官方文档中的 API 参考部分并没有太大的学习价值,可以基于官方提供的几份教程,具体来说,是 OpenCV 教程 和 OpenCV-Python 教程,建立自己的 C++ 和 Python 编程语言的 OpenCV 学习路线图。这两份教程介绍的主题差别不是很大,但不同主题在各份教程中的编排顺序略有不同。
这里以 开发环境搭建 -> OpenCV 的结构和基本概念 -> OpenCV 库提供的开发实用工具 -> OpenCV 核心操作和功能 -> 图像处理 -> 其它 OpenCV 主要模块 -> OpenCV contrib 模块 这样的思路来制定学习路线图:
- 搭建 Python 和 C++ 的开发环境
通过学习教程的 OpenCV 介绍 部分可以完成。
OpenCV-Python Tutorials - Install OpenCV-Python in Ubuntu
OpenCV Tutorials - Installation in Linux
OpenCV Tutorials - Using OpenCV with Eclipse (plugin CDT)
OpenCV Tutorials - Using OpenCV with gcc and CMake
- OpenCV 项目的结构和 API 概念
OpenCV 4.5.5 版文档的入口页面中的 介绍 部分。
- 应用程序实用工具
应用程序实用工具 (highgui,imgcodecs,videoio 模块) (OpenCV 教程)
OpenCV 中的 Gui 功能 (OpenCV Python 教程)
- 核心功能和操作
核心功能 (core 模块) (OpenCV 教程)
核心操作 (OpenCV Python 教程)
- 图形处理
图像处理 (imgproc 模块) (OpenCV 教程)
OpenCV 中的图像处理 (OpenCV Python 教程)
- 相机校准和 3D 重建
相机校准和 3D 重建 (calib3d 模块) (OpenCV 教程)
相机校准和 3D 重建 (OpenCV Python 教程)
- 特征探测和描述 - 特征框架 (feature2d 模块)
2D 特征框架 (feature2d 模块) (OpenCV 教程)
特征探测和描述 (OpenCV Python 教程)
- 计算摄影
其它教程 (ml,objdetect,photo,stitching,video) (OpenCV 教程)
计算摄影 (OpenCV Python 教程)
这其中包含图像去噪、图像修补,和高动态范围 (HDR) 等内容。
- 目标检测
其它教程 (ml,objdetect,photo,stitching,video) (OpenCV 教程)
目标探测 (objdetect 模块) (OpenCV Python 教程)
- 视频分析
其它教程 (ml,objdetect,photo,stitching,video) (OpenCV 教程)
视频分析 (video 模块) (OpenCV Python 教程)
- 机器学习
其它教程 (ml,objdetect,photo,stitching,video) (OpenCV 教程)
机器学习 (OpenCV Python 教程)
- 深度神经网络
深度神经网络 (dnn 模块) (OpenCV 教程)
- 图 API
图 API (gapi 模块) (OpenCV 教程)
- GPU 加速的计算机视觉
GPU 加速的计算机视觉 (cuda 模块) (OpenCV 教程)
- 背景分割
bgsegm 模块教程 (contrib 模块教程)
- 超分辨率
使用 CNN 的超分辨率 (contrib 模块教程)
OpenCV 的这些教程,与一般的技术书还是有些不一样,它们并不是某个人或某个组织按照特定的规划,组织编写的结构严谨的教材,而是不同作者针对不同主题写就的文章的合集。
对于 OpenCV 具体模块的学习,不需要严格按照上面的路线图来走,具体模块学习的先后,可以按照自己的开发需要进行。
Done。