本書基于面向 Python 的 OpenCV(OpenCV for Python),介紹了圖像處理的方方面面。本書以 OpenCV 官方文檔的知識脈絡(luò)為主線,并對細(xì)節(jié)進(jìn)行補(bǔ)充和說明。 書中不僅介紹了 OpenCV 函數(shù)的使用方法,還介紹了函數(shù)實現(xiàn)的算法原理。在介紹 OpenCV 函數(shù)的 使用方法時,提供了大量的程序示例。而且在介紹函數(shù)對圖像的處理前,往往先展示函數(shù)對數(shù)值、數(shù)組 的處理,方便讀者從數(shù)值的角度觀察和理解函數(shù)的處理過程和結(jié)果。在介紹具體的算法原理時,本書盡 量使用通俗易懂的語言和貼近生活的示例來說明問題,避免使用過多復(fù)雜抽象的公式。 本書適合計算機(jī)視覺領(lǐng)域的初學(xué)者閱讀,包括在校學(xué)生、教師、專業(yè)技術(shù)人員、圖像處理愛好者。
李立宗,南開大學(xué)碩士,天津職業(yè)技術(shù)師范大學(xué)副教授,從事計算機(jī)視覺領(lǐng)域的教學(xué)和科研工作。擁有發(fā)明專利一項、軟件著作權(quán)十余項,公開發(fā)表論文十余篇,主編《OpenCV編程案例詳解》等多部圖書。在網(wǎng)易云課堂主講的《OpenCV圖窮匕見》等多門課程被評為精品課。
第1章 OPENCV入門 1
1.1 如何使用 1
1.2 圖像處理基本操作 3
1.2.1 讀取圖像 3
1.2.2 顯示圖像 5
1.2.3 保存圖像 9
1.3 OpenCV貢獻(xiàn)庫 10
第2章 圖像處理基礎(chǔ) 11
2.1 圖像的基本表示方法 11
2.2 像素處理 15
2.3 使用numpy.array訪問像素 23
2.4 感興趣區(qū)域(ROI) 29
2.5 通道操作 32
2.5.1 通道拆分 32
2.5.2 通道合并 34
2.6 獲取圖像屬性 36
第3章 圖像運(yùn)算 37
3.1 圖像加法運(yùn)算 37
3.1.1 加號運(yùn)算符 37
3.1.2 cv2.add()函數(shù) 38
3.2 圖像加權(quán)和 40
3.3 按位邏輯運(yùn)算 43
3.3.1 按位與運(yùn)算 43
3.3.2 按位或運(yùn)算 46
3.3.3 按位非運(yùn)算 47
3.3.4 按位異或運(yùn)算 48
3.4 掩模 49
3.5 圖像與數(shù)值的運(yùn)算 52
3.6 位平面分解 53
3.7 圖像加密和解密 59
3.8 數(shù)字水印 63
3.8.1 原理 64
3.8.2 實現(xiàn)方法 66
3.8.3 例題 73
3.9 臉部打碼及解碼 74
第4章 色彩空間類型轉(zhuǎn)換 77
4.1 色彩空間基礎(chǔ) 77
4.1.1 GRAY色彩空間 77
4.1.2 XYZ色彩空間 78
4.1.3 YCrCb色彩空間 78
4.1.4 HSV色彩空間 79
4.1.5 HLS色彩空間 80
4.1.6 CIEL*a*b*色彩空間 80
4.1.7 CIEL*u*v*色彩空間 81
4.1.8 Bayer色彩空間 82
4.2 類型轉(zhuǎn)換函數(shù) 82
4.3 類型轉(zhuǎn)換實例 88
4.3.1 通過數(shù)組觀察轉(zhuǎn)換效果 88
4.3.2 圖像處理實例 92
4.4 HSV色彩空間討論 93
4.4.1 基礎(chǔ)知識 93
4.4.2 獲取指定顏色 95
4.4.3 標(biāo)記指定顏色 96
4.4.4 標(biāo)記膚色 100
4.4.5 實現(xiàn)藝術(shù)效果 101
4.5 alpha通道 102
第5章 幾何變換 106
5.1 縮放 106
5.2 翻轉(zhuǎn) 110
5.3 仿射 111
5.3.1 平移 112
5.3.2 旋轉(zhuǎn) 113
5.3.3 更復(fù)雜的仿射變換 114
5.4 透視 115
5.5 重映射 117
5.5.1 映射參數(shù)的理解 117
5.5.2 復(fù)制 119
5.5.3 繞x軸翻轉(zhuǎn) 121
5.5.4 繞y軸翻轉(zhuǎn) 122
5.5.5 繞x軸、y軸翻轉(zhuǎn) 124
5.5.6 x軸、y軸互換 126
5.5.7 圖像縮放 128
第6章 閾值處理 130
6.1 threshold函數(shù) 130
6.1.1 二值化閾值處理(cv2.THRESH_BINARY) 131
6.1.2 反二值化閾值處理(cv2.THRESH_BINARY_INV) 133
6.1.3 截斷閾值化處理(cv2.THRESH_TRUNC) 135
6.1.4 超閾值零處理(cv2.THRESH_TOZERO_INV) 136
6.1.5 低閾值零處理(cv2.THRESH_TOZERO) 138
6.2 自適應(yīng)閾值處理 139
6.3 Otsu處理 141
第7章 圖像平滑處理 144
7.1 均值濾波 146
7.1.1 基本原理 146
7.1.2 函數(shù)語法 150
7.1.3 程序示例 150
7.2 方框濾波 152
7.2.1 基本原理 152
7.2.2 函數(shù)語法 153
7.2.3 程序示例 154
7.3 高斯濾波 156
7.3.1 基本原理 156
7.3.2 函數(shù)語法 158
7.3.3 程序示例 159
7.4 中值濾波 159
7.4.1 基本原理 160
7.4.2 函數(shù)語法 161
7.4.3 程序示例 161
7.5 雙邊濾波 162
7.5.1 基本原理 162
7.5.2 函數(shù)語法 164
7.5.3 程序示例 164
7.6 2D卷積 166
第8章 形態(tài)學(xué)操作 168
8.1 腐蝕 168
8.2 膨脹 173
8.3 通用形態(tài)學(xué)函數(shù) 178
8.4 開運(yùn)算 179
8.5 閉運(yùn)算 180
8.6 形態(tài)學(xué)梯度運(yùn)算 182
8.7 禮帽運(yùn)算 183
8.8 黑帽運(yùn)算 185
8.9 核函數(shù) 186
第9章 圖像梯度 189
9.1 Sobel理論基礎(chǔ) 189
9.2 Sobel算子及函數(shù)使用 191
9.2.1 參數(shù)ddepth 192
9.2.2 方向 195
9.2.3 實例 196
9.3 Scharr算子及函數(shù)使用 200
9.4 Sobel算子和Scharr算子的比較 204
9.5 Laplacian算子及函數(shù)使用 206
9.6 算子總結(jié) 208
第10章 CANNY邊緣檢測 209
10.1 Canny邊緣檢測基礎(chǔ) 209
10.2 Canny函數(shù)及使用 213
第11章 圖像金字塔 215
11.1 理論基礎(chǔ) 215
11.2 pyrDown函數(shù)及使用 217
11.3 pyrUp函數(shù)及使用 219
11.4 采樣可逆性的研究 220
11.5 拉普拉斯金字塔 223
11.5.1 定義 223
11.5.2 應(yīng)用 225
第12章 圖像輪廓 229
12.1 查找并繪制輪廓 229
12.1.1 查找圖像輪廓:findContours函數(shù) 229
12.1.2 繪制圖像輪廓:drawContours函數(shù) 237
12.1.3 輪廓實例 238
12.2 矩特征 240
12.2.1 矩的計算:moments函數(shù) 241
12.2.2 計算輪廓的面積:contourArea函數(shù) 243
12.2.3 計算輪廓的長度:arcLength函數(shù) 246
12.3 Hu矩 248
12.3.1 Hu矩函數(shù) 248
12.3.2 形狀匹配 252
12.4 輪廓擬合 254
12.4.1 矩形包圍框 254
12.4.2 最小包圍矩形框 257
12.4.3 最小包圍圓形 259
12.4.4 最優(yōu)擬合橢圓 260
12.4.5 最優(yōu)擬合直線 261
12.4.6 最小外包三角形 262
12.4.7 逼近多邊形 263
12.5 凸包 266
12.5.1 獲取凸包 267
12.5.2 凸缺陷 268
12.5.3 幾何學(xué)測試 270
12.6 利用形狀場景算法比較輪廓 275
12.6.1 計算形狀場景距離 275
12.6.2 計算Hausdorff距離 278
12.7 輪廓的特征值 280
12.7.1 寬高比 280
12.7.2 Extent 281
12.7.3 Solidity 282
12.7.4 等效直徑(Equivalent Diameter) 283
12.7.5 方向 284
12.7.6 掩模和像素點 286
12.7.7 最大值和最小值及它們的位置 291
12.7.8 平均顏色及平均灰度 293
12.7.9 極點 294
第13章 直方圖處理 297
13.1 直方圖的含義 297
13.2 繪制直方圖 301
13.2.1 使用Numpy繪制直方圖 301
13.2.2 使用OpenCV繪制直方圖 302
13.2.3 使用掩模繪制直方圖 307
13.3 直方圖均衡化 312
13.3.1 直方圖均衡化原理 313
13.3.2 直方圖均衡化處理 317
13.4 pyplot模塊介紹 319
13.4.1 subplot函數(shù) 319
13.4.2 imshow函數(shù) 320
第14章 傅里葉變換 324
14.1 理論基礎(chǔ) 324
14.2 Numpy實現(xiàn)傅里葉變換 328
14.2.1 實現(xiàn)傅里葉變換 329
14.2.2 實現(xiàn)逆傅里葉變換 330
14.2.3 高通濾波示例 331
14.3 OpenCV實現(xiàn)傅里葉變換 333
14.3.1 實現(xiàn)傅里葉變換 333
14.3.2 實現(xiàn)逆傅里葉變換 335
14.3.3 低通濾波示例 336
第15章 模板匹配 339
15.1 模板匹配基礎(chǔ) 339
15.2 多模板匹配 345
第16章 霍夫變換 351
16.1 霍夫直線變換 351
16.1.1 霍夫變換原理 351
16.1.2 HoughLines函數(shù) 357
16.1.3 HoughLinesP函數(shù) 359
16.2 霍夫圓環(huán)變換 361
第17章 圖像分割與提取 364
17.1 用分水嶺算法實現(xiàn)圖像分割與提取 364
17.1.1 算法原理 364
17.1.2 相關(guān)函數(shù)介紹 366
17.1.3 分水嶺算法圖像分割實例 375
17.2 交互式前景提取 376
第18章 視頻處理 383
18.1 VideoCapture類 383
18.1.1 類函數(shù)介紹 383
18.1.2 捕獲攝像頭視頻 387
18.1.3 播放視頻文件 388
18.2 VideoWriter類 389
18.2.1 類函數(shù)介紹 389
18.2.2 保存視頻 391
18.3 視頻操作基礎(chǔ) 392
第19章 繪圖及交互 393
19.1 繪畫基礎(chǔ) 393
19.1.1 繪制直線 394
19.1.2 繪制矩形 394
19.1.3 繪制圓形 395
19.1.4 繪制橢圓 397
19.1.5 繪制多邊形 398
19.1.6 在圖形上繪制文字 400
19.2 鼠標(biāo)交互 402
19.2.1 簡單示例 404
19.2.2 進(jìn)階示例 405
19.3 滾動條 407
19.3.1 用滾動條實現(xiàn)調(diào)色板 408
19.3.2 用滾動條控制閾值處理參數(shù) 409
19.3.3 用滾動條作為開關(guān) 410
第20章 K近鄰算法 412
20.1 理論基礎(chǔ) 412
20.2 計算 415
20.2.1 歸一化 415
20.2.2 距離計算 416
20.2 手寫數(shù)字識別的原理 417
20.3 自定義函數(shù)手寫數(shù)字識別 421
20.4 K近鄰模塊的基本使用 427
20.5 K近鄰手寫數(shù)字識別 429
第21章 支持向量機(jī) 431
21.1 理論基礎(chǔ) 431
21.2 SVM案例介紹 434
第22章 K均值聚類 439
22.1 理論基礎(chǔ) 439
22.1.1 分豆子 439
22.1.2 K均值聚類的基本步驟 441
22.2 K均值聚類模塊 441
22.3 簡單示例 442
第23章 人臉識別 448
23.1 人臉檢測 448
23.1.1 基本原理 448
23.1.2 級聯(lián)分類器的使用 451
23.1.3 函數(shù)介紹 452
23.1.4 案例介紹 453
23.2 LBPH人臉識別 454
23.2.1 基本原理 454
23.2.2 函數(shù)介紹 456
23.2.3 案例介紹 457
23.3 EigenFaces人臉識別 458
23.3.1 基本原理 458
23.3.2 函數(shù)介紹 459
23.3.3 案例介紹 460
23.4 Fisherfaces人臉識別 461
23.4.1 基本原理 461
23.4.2 函數(shù)介紹 463
23.4.3 案例介紹 464
23.5 人臉數(shù)據(jù)庫 465
參與文獻(xiàn) 467
附錄A 范例 470