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)
- 參考文獻
- 主要模塊:
- 額外模塊:
- 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 介紹 部分的內容如下:
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
其它平臺
基礎用法
- 圖像入門 - 我們將學習如何從文件中加載圖像,并使用 OpenCV 顯示它
雜項
- 為 OpenCV 編寫文檔 - 這份教程描述了新文檔的寫作過程,及一些有用的 Doxygen 特性。
- 過渡指南 guide - 這份文檔描述了 2.4 -> 3.0 的轉換過程的一些方面。
- 從其它的 Doxygen 工程交叉引用 OpenCV - 本文檔概述了如何從其他 Doxygen 項目創建對 OpenCV 文檔的交叉引用。
OpenCV 教程 的 OpenCV 介紹 部分對于開發環境搭建過程的詳細說明,無疑是我們學習 OpenCV 過程中繞不過去的第一步的寶貴參考。
OpenCV-Python 教程 的內容
當前 Python 在 AI 和計算機視覺領域應用廣泛,OpenCV-Python 教程 對于 Python 計算機視覺學習和開發的同學極具價值。這里看一下這份教程的內容:
-
學習如何在計算機上搭建 OpenCV-Python 開發環境!
-
在這里,我們將學習如何顯示和保存圖像和視頻、控制鼠標事件和創建軌跡欄。的第一步的寶貴
-
在本節中,我們將學習圖像的基本操作,如像素編輯、幾何變換、代碼優化、一些數學工具等。的第一步的寶貴
-
在這一節,我們將學習 OpenCV 中不同的圖像處理功能。
-
在本節中,我們將了解特征探測器和描述符
-
在本節中,我們將學習使用對象跟蹤等視頻的不同技術。
-
在本節中,我們將學習相機校準、立體成像等。
-
在本節中,我們將學習 OpenCV 中不同的機器學習功能。
-
在本節中,我們將學習不同的計算攝影技術,例如圖像去噪等。
-
在本節中,我們將學習目標檢測技術,例如人臉檢測等。
-
在本節中,我們將看一下 OpenCV-Python 綁定是如何生成的。
這份教程的結構與 OpenCV 教程 的結構類似,其中的 OpenCV 介紹 部分同樣介紹了開發環境搭建,其余各部分介紹 OpenCV 的各個模塊。
OpenCV-Python 教程 的 OpenCV 介紹 部分內容如下:
-
OpenCV-Python 入門
-
在 Windows 中搭建 OpenCV-Python 開發環境
-
在 Fedora 中搭建 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。