本書基于面向 Python 的 OpenCV(OpenCV for Python),介紹了圖像處理的方方面面。本書以 OpenCV 官方文檔的知識脈絡(luò)為主線,并對細節(jié)進行補充和說明。 書中不僅介紹了 OpenCV 函數(shù)的使用方法,還介紹了函數(shù)實現(xiàn)的算法原理。在介紹 OpenCV 函數(shù)的 使用方法時,提供了大量的程序示例。而且在介紹函數(shù)對圖像的處理前,往往先展示函數(shù)對數(shù)值、數(shù)組 的處理,方便讀者從數(shù)值的角度觀察和理解函數(shù)的處理過程和結(jié)果。在介紹具體的算法原理時,本書盡 量使用通俗易懂的語言和貼近生活的示例來說明問題,避免使用過多復(fù)雜抽象的公式。
李立宗,天津職業(yè)技術(shù)師范大學(xué)信息技術(shù)工程學(xué)院副教授,參與了《數(shù)字圖像處理》等多本圖書的編寫工作,對數(shù)字圖像處理研究頗深。
第1章 OpenCV入門 1
1.1 如何使用 1
1.2 圖像處理基本操作 3
1.2.1 讀取圖像 4
1.2.2 顯示圖像 5
1.2.3 保存圖像 10
1.3 OpenCV貢獻庫 10
第2章 圖像處理基礎(chǔ) 12
2.1 圖像的基本表示方法 12
2.2 像素處理 16
2.3 使用numpy.array訪問像素 24
2.4 感興趣區(qū)域(ROI) 30
2.5 通道操作 32
2.5.1 通道拆分 33
2.5.2 通道合并 35
2.6 獲取圖像屬性 36
第3章 圖像運算 38
3.1 圖像加法運算 38
3.1.1 加號運算符 38
3.1.2 cv2.add()函數(shù) 39
3.2 圖像加權(quán)和 42
3.3 按位邏輯運算 44
3.3.1 按位與運算 44
3.3.2 按位或運算 48
3.3.3 按位非運算 49
3.3.4 按位異或運算 50
3.4 掩膜 51
3.5 圖像與數(shù)值的運算 54
3.6 位平面分解 56
3.7 圖像加密和解密 62
3.8 數(shù)字水印 66
3.8.1 原理 67
3.8.2 實現(xiàn)方法 70
3.8.3 例題 77
3.9 臉部打碼及解碼 78
3.9.1 按位與方式 78
3.9.2 ROI方式 82
第4章 色彩空間類型轉(zhuǎn)換 85
4.1 色彩空間基礎(chǔ) 85
4.1.1 GRAY色彩空間 85
4.1.2 XYZ色彩空間 86
4.1.3 YCrCb色彩空間 86
4.1.4 HSV色彩空間 87
4.1.5 HLS色彩空間 88
4.1.6 CIEL*a*b*色彩空間 89
4.1.7 CIEL*u*v*色彩空間 90
4.1.8 Bayer色彩空間 90
4.2 類型轉(zhuǎn)換函數(shù) 92
4.3 類型轉(zhuǎn)換實例 98
4.3.1 通過數(shù)組觀察轉(zhuǎn)換效果 98
4.3.2 圖像處理實例 102
4.4 HSV色彩空間討論 104
4.4.1 基礎(chǔ)知識 104
4.4.2 獲取指定顏色 105
4.4.3 標記指定顏色 107
4.4.4 標記膚色 111
4.4.5 實現(xiàn)藝術(shù)效果 112
4.5 alpha通道 113
第5章 幾何變換 117
5.1 縮放 117
5.2 翻轉(zhuǎn) 121
5.3 仿射 122
5.3.1 平移 123
5.3.2 旋轉(zhuǎn) 124
5.3.3 更復(fù)雜的仿射變換 125
5.4 透視 126
5.5 重映射 128
5.5.1 映射參數(shù)的理解 129
5.5.2 復(fù)制 130
5.5.3 繞x軸翻轉(zhuǎn) 132
5.5.4 繞y軸翻轉(zhuǎn) 134
5.5.5 繞x軸、y軸翻轉(zhuǎn) 136
5.5.6 x軸、y軸互換 138
5.5.7 圖像縮放 140
第6章 閾值處理 141
6.1 threshold函數(shù) 141
6.1.1 二值化閾值處理(cv2.THRESH_BINARY) 142
6.1.2 反二值化閾值處理(cv2.THRESH_BINARY_INV) 144
6.1.3 截斷閾值化處理(cv2.THRESH_TRUNC) 146
6.1.4 超閾值零處理(cv2.THRESH_TOZERO_INV) 147
6.1.5 低閾值零處理(cv2.THRESH_TOZERO) 149
6.2 Otsu處理 150
6.3 自適應(yīng)閾值處理 153
第7章 圖像平滑處理 157
7.1 均值濾波 159
7.1.1 基本原理 159
7.1.2 函數(shù)語法 166
7.1.3 程序示例 167
7.2 方框濾波 168
7.2.1 基本原理 169
7.2.2 函數(shù)語法 169
7.2.3 程序示例 171
7.3 高斯濾波 176
7.3.1 基本原理 176
7.3.2 函數(shù)語法 177
7.3.3 程序示例 179
7.4 中值濾波 180
7.4.1 基本原理 180
7.4.2 函數(shù)語法 181
7.4.3 程序示例 181
7.5 雙邊濾波 182
7.5.1 基本原理 182
7.5.2 函數(shù)語法 184
7.5.3 程序示例 185
7.6 2D卷積 186
第8章 形態(tài)學(xué)操作 189
8.1 腐蝕 189
8.2 膨脹 194
8.3 通用形態(tài)學(xué)函數(shù) 199
8.4 開運算 199
8.5 閉運算 201
8.6 形態(tài)學(xué)梯度運算 203
8.7 禮帽運算 204
8.8 黑帽運算 205
8.9 核函數(shù) 207
第9章 圖像梯度 210
9.1 卷積基礎(chǔ) 210
9.2 Sobel理論基礎(chǔ) 214
9.3 Sobel算子及函數(shù)使用 216
9.3.1 參數(shù)ddepth 217
9.3.2 方向 221
9.3.3 實例 223
9.4 Scharr算子及函數(shù)使用 226
9.5 Sobel算子和Scharr算子的比較 231
9.6 Laplacian算子及函數(shù)使用 232
9.7 算子總結(jié) 234
第10章 Canny邊緣檢測 235
10.1 Canny邊緣檢測基礎(chǔ) 235
10.2 Canny函數(shù)及使用 239
第11章 圖像金字塔 241
11.1 理論基礎(chǔ) 241
11.2 pyrDown函數(shù)及使用 243
11.3 pyrUp函數(shù)及使用 245
11.4 采樣可逆性的研究 247
11.5 拉普拉斯金字塔 250
11.5.1 定義 250
11.5.2 應(yīng)用 252
第12章 圖像輪廓 257
12.1 查找并繪制輪廓 257
12.1.1 查找圖像輪廓:findContours函數(shù) 257
12.1.2 繪制圖像輪廓:drawContours函數(shù) 265
12.1.3 輪廓實例 266
12.2 矩特征 270
12.2.1 矩的計算:moments函數(shù) 271
12.2.2 計算輪廓的面積:contourArea函數(shù) 273
12.2.3 計算輪廓的長度:arcLength函數(shù) 276
12.3 Hu矩 278
12.3.1 Hu矩函數(shù) 278
12.3.2 形狀匹配 282
12.4 輪廓擬合 284
12.4.1 矩形包圍框 285
12.4.2 最小包圍矩形框 287
12.4.3 最小包圍圓形 289
12.4.4 最優(yōu)擬合橢圓 290
12.4.5 最優(yōu)擬合直線 291
12.4.6 最小外包三角形 293
12.4.7 逼近多邊形 294
12.5 凸包 296
12.5.1 獲取凸包 297
12.5.2 凸缺陷 299
12.5.3 幾何學(xué)測試 302
12.6 利用形狀場景算法比較輪廓 306
12.6.1 計算形狀場景距離 306
12.6.2 計算Hausdorff距離 309
12.7 輪廓的特征值 312
12.7.1 寬高比 312
12.7.2 Extent 313
12.7.3 Solidity 314
12.7.4 等效直徑(Equivalent Diameter) 315
12.7.5 方向 316
12.7.6 掩膜和像素點 318
12.7.7 最大值和最小值及它們的位置 323
12.7.8 平均顏色及平均灰度 325
12.7.9 極點 326
第13章 直方圖處理 329
13.1 直方圖的含義 329
13.2 繪制直方圖 333
13.2.1 使用Numpy繪制直方圖 333
13.2.2 使用OpenCV繪制直方圖 335
13.2.3 使用掩膜繪制直方圖 341
13.3 直方圖均衡化 345
13.3.1 直方圖均衡化原理 347
13.3.2 直方圖均衡化處理 351
13.4 pyplot模塊介紹 353
13.4.1 subplot函數(shù) 353
13.4.2 imshow函數(shù) 354
第14章 傅里葉變換 358
14.1 理論基礎(chǔ) 358
14.2 Numpy實現(xiàn)傅里葉變換 362
14.2.1 實現(xiàn)傅里葉變換 363
14.2.2 實現(xiàn)逆傅里葉變換 364
14.3 OpenCV實現(xiàn)傅里葉變換 365
14.3.1 實現(xiàn)傅里葉變換 366
14.3.2 實現(xiàn)逆傅里葉變換 368
14.4 濾波處理 369
14.4.1 濾波原理 369
14.4.2 高通濾波實現(xiàn) 374
14.4.3 低通濾波實現(xiàn) 377
第15章 模板匹配 380
15.1 模板匹配基礎(chǔ) 380
15.2 多模板匹配 387
第16章 霍夫變換 393
16.1 霍夫直線變換 393
16.1.1 霍夫變換原理 393
16.1.2 HoughLines函數(shù) 399
16.1.3 HoughLinesP函數(shù) 401
16.2 霍夫圓環(huán)變換 403
第17章 圖像分割與提取 406
17.1 用分水嶺算法實現(xiàn)圖像分割與提取 406
17.1.1 算法原理 406
17.1.2 相關(guān)函數(shù)介紹 408
17.1.3 分水嶺算法圖像分割實例 418
17.2 交互式前景提取 421
17.2.1 矩形框提取 424
17.2.2 自定義模板提取 426
17.2.3 手繪模板提取 429
第18章 視頻處理 432
18.1 VideoCapture類 432
18.1.1 類函數(shù)介紹 432
18.1.2 捕獲攝像頭視頻 437
18.1.3 播放視頻文件 438
18.2 VideoWriter類 438
18.2.1 類函數(shù)介紹 439
18.2.2 保存視頻 440
18.3 視頻操作基礎(chǔ) 442
第19章 繪圖及交互 444
19.1 繪畫基礎(chǔ) 444
19.1.1 繪制直線 445
19.1.2 繪制矩形 446
19.1.3 繪制圓形 447
19.1.4 繪制橢圓 449
19.1.5 繪制多邊形 450
19.1.6 在圖形上繪制文字 451
19.2 鼠標交互 454
19.2.1 繪制隨機矩形 456
19.2.2 雙窗口繪制圖形 457
19.2.3 繪制多種不同圖形 458
19.3 滾動條 460
19.3.1 用滾動條實現(xiàn)調(diào)色板 461
19.3.2 滾動條交互 462
19.3.3 用滾動條作為開關(guān) 463
第20章 K近鄰算法 465
20.1 理論基礎(chǔ) 465
20.2 計算 468
20.2.1 歸一化 468
20.2.2 距離計算 469
20.3 手寫數(shù)字識別的原理 470
20.4 自定義函數(shù)手寫數(shù)字識別 475
20.5 K近鄰模塊的基本使用 482
20.6 K近鄰手寫數(shù)字識別 487
第21章 支持向量機 490
21.1 理論基礎(chǔ) 490
21.2 SVM流程 493
21.3 SVM員工表現(xiàn)預(yù)測 494
21.4 手寫數(shù)字識別 498
第22章 K均值聚類 508
22.1 理論基礎(chǔ) 508
22.1.1 分豆子 509
22.1.2 K均值聚類的基本步驟 512
22.2 K均值聚類模塊 512
22.3 單特征豆子分類 513
22.4 米粒分類 517
22.5 灰度圖像二值化 521
第23章 人臉識別 526
23.1 人臉檢測 526
23.1.1 基本原理 526
23.1.2 級聯(lián)分類器的使用 529
23.1.3 函數(shù)介紹 530
23.1.4 案例介紹 531
23.2 人臉識別基礎(chǔ) 534
23.2.1 人臉識別基本流程 534
23.2.2 OpenCV人臉識別基礎(chǔ) 535
23.3 LPBH人臉識別 536
23.3.1 基本原理 537
23.3.2 函數(shù)介紹 540
23.3.3 案例介紹 541
23.4 EigenFaces人臉識別 543
23.4.1 基本原理 543
23.4.2 函數(shù)介紹 543
23.4.3 案例介紹 544
23.5 Fisherfaces人臉識別 546
23.5.1 基本原理 546
23.5.2 函數(shù)介紹 547
23.5.3 案例介紹 548
23.6 人臉數(shù)據(jù)庫 549