開篇先介紹如何在Windows和ubuntu上部署OpenCV,然后過度到核心章節(jié),從灰度圖像、彩色圖像、圖像平滑、邊緣檢測、霍夫變換等幾個(gè)維度入手講解,盡量拆分算法,代碼實(shí)現(xiàn)用C++和Python代碼。案例在每章最后分享,方便讀者練習(xí)。
Python與C++雙實(shí)現(xiàn),助力讀者輕松駕馭OpenCV算法,夯實(shí)計(jì)算機(jī)視覺領(lǐng)域基礎(chǔ)知識(shí)!
基本概念理論+數(shù)學(xué)原理
詳細(xì)介紹OpenCV實(shí)現(xiàn)對(duì)應(yīng)的函數(shù)
注重代碼實(shí)現(xiàn)(分別給出Python和C++實(shí)現(xiàn))及實(shí)際應(yīng)用
張平,數(shù)學(xué)與應(yīng)用數(shù)學(xué)專業(yè),算法工程師。主要從事圖像算法研究和產(chǎn)品的應(yīng)用開發(fā),此外還從事有關(guān)機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘算法的應(yīng)用研發(fā)工作。
目錄
1 OpenCV入門
1.1 初識(shí)OpenCV
1.1.1 OpenCV的模塊簡介
1.1.2 OpenCV 2.4.13與3.2版本的區(qū)別
1.2 部署OpenCV
1.2.1 在Visual Studio 2015中 配置OpenCV
1.2.2 OpenCV 2.X C++ API的第一個(gè)示例
1.2.3 OpenCV 3.X C++ API的第一個(gè)示例
1.2.4 在Anaconda 2中配置OpenCV
1.2.5 OpenCV 2.X Python API的第一個(gè)示例
1.2.6 OpenCV 3.X Python API的第一個(gè)示例
2 圖像數(shù)字化
2.1 認(rèn)識(shí)Numpy中的ndarray
2.1.1 構(gòu)造ndarray對(duì)象
2.1.2 訪問ndarray中的值
2.2 認(rèn)識(shí)OpenCV中的Mat類
2.2.1 初識(shí)Mat
2.2.2 構(gòu)造單通道Mat對(duì)象
2.2.3 獲得單通道Mat的基本信息
2.2.4 訪問單通道Mat對(duì)象中的值
2.2.5 向量類Vec
2.2.6 構(gòu)造多通道Mat對(duì)象
2.2.7 訪問多通道Mat對(duì)象中的值
2.2.8 獲得Mat中某一區(qū)域的值
2.3 矩陣的運(yùn)算
2.3.1 加法運(yùn)算
2.3.2 減法運(yùn)算
2.3.3 點(diǎn)乘運(yùn)算
2.3.4 點(diǎn)除運(yùn)算
2.3.5 乘法運(yùn)算
2.3.6 其他運(yùn)算
2.4 灰度圖像數(shù)字化
2.4.1 概述
2.4.2 將灰度圖像轉(zhuǎn)換為Mat
2.4.3 將灰度圖轉(zhuǎn)換為ndarray
2.5 彩色圖像數(shù)字化
2.5.1 將RGB彩色圖像轉(zhuǎn)換為多通道Mat
2.5.2 將RGB彩色圖轉(zhuǎn)換為三維的ndarray
2.6 參考文獻(xiàn)
3 幾何變換
3.1 仿射變換
3.1.1 平移
3.1.2 放大和縮小
3.1.3 旋轉(zhuǎn)
3.1.4 計(jì)算仿射矩陣
3.1.5 插值算法
3.1.6 Python實(shí)現(xiàn)
3.1.7 C++實(shí)現(xiàn)
3.1.8 旋轉(zhuǎn)函數(shù)rotate(OpenCV3.X新特性)
3.2 投影變換
3.2.1 原理詳解
3.2.2 Python實(shí)現(xiàn)
3.2.3 C++實(shí)現(xiàn)
3.3 極坐標(biāo)變換
3.3.1 原理詳解
3.3.2 Python實(shí)現(xiàn)
3.3.3 C++實(shí)現(xiàn)
3.3.4 線性極坐標(biāo)函數(shù)linearPolar(OpenCV 3.X新特性)
3.3.5 對(duì)數(shù)極坐標(biāo)函數(shù)logPolar(OpenCV 3.X新特性)
3.4 參考文獻(xiàn)
4 對(duì)比度增強(qiáng)
4.1 灰度直方圖
4.1.1 什么是灰度直方圖
4.1.2 Python及C++實(shí)現(xiàn)
4.2 線性變換
4.2.1 原理詳解
4.2.2 Python實(shí)現(xiàn)
4.2.3 C++實(shí)現(xiàn)
4.3 直方圖正規(guī)化
4.3.1 原理詳解
4.3.2 Python實(shí)現(xiàn)
4.3.3 C++實(shí)現(xiàn)
4.3.4 正規(guī)化函數(shù)normalize
4.4 伽馬變換
4.4.1 原理詳解
4.4.2 Python實(shí)現(xiàn)
4.4.3 C++實(shí)現(xiàn)
4.5 全局直方圖均衡化
4.5.1 原理詳解
4.5.2 Python實(shí)現(xiàn)
4.5.3 C++實(shí)現(xiàn)
4.6 限制對(duì)比度的自適應(yīng)直方圖均衡化
4.6.1 原理詳解
4.6.2 代碼實(shí)現(xiàn)
4.7 參考文獻(xiàn)
5 圖像平滑
5.1 二維離散卷積
5.1.1 卷積定義及矩陣形式
5.1.2 可分離卷積核
5.1.3 離散卷積的性質(zhì)
5.2 高斯平滑
5.2.1 高斯卷積核的構(gòu)建及分離性
5.2.2 高斯卷積核的二項(xiàng)式近似
5.2.3 Python實(shí)現(xiàn)
5.2.4 C++實(shí)現(xiàn)
5.3 均值平滑
5.3.1 均值卷積核的構(gòu)建及分離性
5.3.2 快速均值平滑
5.3.3 Python實(shí)現(xiàn)
5.3.4 C++實(shí)現(xiàn)
5.4 中值平滑
5.4.1 原理詳解
5.4.2 Python實(shí)現(xiàn)
5.4.3 C++實(shí)現(xiàn)
5.5 雙邊濾波
5.5.1 原理詳解
5.5.2 Python實(shí)現(xiàn)
5.5.3 C++實(shí)現(xiàn)
5.6 聯(lián)合雙邊濾波
5.6.1 原理詳解
5.6.2 Python實(shí)現(xiàn)
5.6.3 C++實(shí)現(xiàn)
5.7 導(dǎo)向?yàn)V波
5.7.1 原理詳解
5.7.2 Python實(shí)現(xiàn)
5.7.3 快速導(dǎo)向?yàn)V波
5.7.4 C++實(shí)現(xiàn)
5.8 參考文獻(xiàn)
6 閾值分割
6.1 方法概述
6.1.1 全局閾值分割
6.1.2 閾值函數(shù)threshold(OpenCV3.X新特性)
6.1.3 局部閾值分割
6.2 直方圖技術(shù)法
6.2.1 原理詳解
6.2.2 Python實(shí)現(xiàn)
6.2.3 C++實(shí)現(xiàn)
6.3 熵算法
6.3.1 原理詳解
6.3.2 代碼實(shí)現(xiàn)
6.4 Otsu閾值處理
6.4.1 原理詳解
6.4.2 Python實(shí)現(xiàn)
6.4.3 C++實(shí)現(xiàn)
6.5 自適應(yīng)閾值
6.5.1 原理詳解
6.5.2 Python實(shí)現(xiàn)
6.5.3 C++實(shí)現(xiàn)
6.6 二值圖的邏輯運(yùn)算
6.6.1 “與”和“或”運(yùn)算
6.6.2 Python實(shí)現(xiàn)
6.6.3 C++實(shí)現(xiàn)
6.7 參考文獻(xiàn)
7 形態(tài)學(xué)處理
7.1 腐蝕
7.1.1 原理詳解
7.1.2 實(shí)現(xiàn)代碼及效果
7.2 膨脹
7.2.1 原理詳解
7.2.2 Python實(shí)現(xiàn)
7.2.3 C++實(shí)現(xiàn)
7.3 開運(yùn)算和閉運(yùn)算
7.3.1 原理詳解
7.3.2 Python實(shí)現(xiàn)
7.4 其他形態(tài)學(xué)處理操作
7.4.1 頂帽變換和底帽變換
7.4.2 形態(tài)學(xué)梯度
7.4.3 C++實(shí)現(xiàn)
8 邊緣檢測
8.1 Roberts算子
8.1.1 原理詳解
8.1.2 Python實(shí)現(xiàn)
8.1.3 C++實(shí)現(xiàn)
8.2 Prewitt邊緣檢測
8.2.1 Prewitt算子及分離性
8.2.2 Python實(shí)現(xiàn)
8.2.3 C++實(shí)現(xiàn)
8.3 Sobel邊緣檢測
8.3.1 Sobel算子及分離性
8.3.2 構(gòu)建高階的Sobel算子
8.3.3 Python實(shí)現(xiàn)
8.3.4 C++實(shí)現(xiàn)
8.4 Scharr算子
8.4.1 原理詳解
8.4.2 Python實(shí)現(xiàn)
8.4.3 C++實(shí)現(xiàn)
8.5 Kirsch算子和Robinson算子
8.5.1 原理詳解
8.5.2 代碼實(shí)現(xiàn)及效果
8.6 Canny邊緣檢測
8.6.1 原理詳解
8.6.2 Python實(shí)現(xiàn)
8.6.3 C++實(shí)現(xiàn)
8.7 Laplacian算子
8.7.1 原理詳解
8.7.2 Python實(shí)現(xiàn)
8.7.3 C++實(shí)現(xiàn)
8.8 高斯拉普拉斯(LoG)邊緣檢測
8.8.1 原理詳解
8.8.2 Python實(shí)現(xiàn)
8.8.3 C++實(shí)現(xiàn)
8.9 高斯差分(DoG)邊緣檢測
8.9.1 高斯拉普拉斯與高斯差分的關(guān)系
8.9.2 Python實(shí)現(xiàn)
8.9.3 C++實(shí)現(xiàn)
8.10 Marr-Hildreth邊緣檢測
8.10.1 算法步驟詳解
8.10.2 Pyton實(shí)現(xiàn)
8.10.3 C++實(shí)現(xiàn)
8.11 參考文獻(xiàn)
9 幾何形狀的檢測和擬合
9.1 點(diǎn)集的最小外包
9.1.1 最小外包旋轉(zhuǎn)矩形
9.1.2 旋轉(zhuǎn)矩形的4個(gè)頂點(diǎn)(OpenCV 3.X新特性)
9.1.3 最小外包圓
9.1.4 最小外包直立矩形(OpenCV 3.X新特性)
9.1.5 最小凸包
9.1.6 最小外包三角形( OpenCV 3.X新特性)
9.2 霍夫直線檢測
9.2.1 原理詳解
9.2.2 Python實(shí)現(xiàn)
9.2.3 C++實(shí)現(xiàn)
9.3 霍夫圓檢測
9.3.1 標(biāo)準(zhǔn)霍夫圓檢測
9.3.2 Python實(shí)現(xiàn)
9.3.3 基于梯度的霍夫圓檢測
9.3.4 基于梯度的霍夫圓檢測函數(shù)HoughCircles
9.4 輪廓
9.4.1 查找、繪制輪廓
9.4.2 外包、擬合輪廓
9.4.3 輪廓的周長和面積
9.4.4 點(diǎn)和輪廓的位置關(guān)系
9.4.5 輪廓的凸包缺陷
9.5 參考文獻(xiàn)
10 傅里葉變換
10.1 二維離散的傅里葉(逆)變換
10.1.1 數(shù)學(xué)理解篇
10.1.2 快速傅里葉變換
10.1.3 C++實(shí)現(xiàn)
10.1.4 Python實(shí)現(xiàn)
10.2 傅里葉幅度譜與相位譜
10.2.1 基礎(chǔ)知識(shí)
10.2.2 Python實(shí)現(xiàn)
10.2.3 C++實(shí)現(xiàn)
10.3 譜殘差顯著性檢測
10.3.1 原理詳解
10.3.2 Python實(shí)現(xiàn)
10.3.3 C++實(shí)現(xiàn)
10.4 卷積與傅里葉變換的關(guān)系
10.4.1 卷積定理
10.4.2 Python實(shí)現(xiàn)
10.5 通過快速傅里葉變換計(jì)算卷積
10.5.1 步驟詳解
10.5.2 Python實(shí)現(xiàn)
10.5.3 C++實(shí)現(xiàn)
10.6 參考文獻(xiàn)
11 頻率域?yàn)V波
11.1 概述及原理詳解
11.2 低通濾波和高通濾波
11.2.1 三種常用的低通濾波器
11.2.2 低通濾波的C++實(shí)現(xiàn)
11.2.3 低通濾波的Python實(shí)現(xiàn)
11.2.4 三種常用的高通濾波器
11.3 帶通和帶阻濾波
11.3.1 三種常用的帶通濾波器
11.3.2 三種常用的帶阻濾波器
11.4 自定義濾波器
11.4.1 原理詳解
11.4.2 C++實(shí)現(xiàn)
11.5 同態(tài)濾波
11.5.1 原理詳解
11.5.2 Python實(shí)現(xiàn)
11.6 參考文獻(xiàn)
12 色彩空間
12.1 常見的色彩空間
12.1.1 RGB色彩空間
12.1.2 HSV色彩空間
12.1.3 HLS色彩空間
12.2 調(diào)整彩色圖像的飽和度和亮度
12.2.1 Python實(shí)現(xiàn)
12.2.2 C++實(shí)現(xiàn)