內容簡介
計算機視覺是在圖像處理的基礎上發展起來的新興學科。OpenCV是一個開源的計算機視覺庫,是英特爾公司資助的兩大圖像處理利器之一。它為圖像處理、模式識別、三維重建、物體跟蹤、機器學習和線性代數提供了各種各樣的算法。
《學習OpenCV 3(中文版)》由OpenCV發起人所寫,站在一線開發人員的角度用通俗易懂的語言解釋了OpenCV的緣起和計算機視覺基礎結構,演示了如何用OpenCV和現有的自由代碼為各種各樣的機器進行編程,這些都有助於讀者迅速入門並漸入佳境,興趣盎然地深入探索計算機視覺領域。
《學習OpenCV 3(中文版)》可作為信息處理、計算機、機器人、人工智慧、
遙感圖像處理、認知神經科學等有關專業的高年級學生或研究生的教學用書,也可供相關領域的研究工作者參考。
作者簡介
安德里安•凱勒(Adrian Kaehler)博士,企業家,矽谷深度學習小組創始人。他的工作重心包括機器學習、統計建模、計算機視覺和機器人。他就職於史丹福大學人工智慧實驗室,他還是該校斯坦利團隊的成員,該團隊在美國國家航空與航天局(NASA)主辦的機器人挑戰賽中勝出,贏得了200萬美元的大獎。
加里•布拉德斯基(Gary Bradski)博士是Arraiy.ai的首席架構師(CTO),他曾經就職於好幾個創業公司,擔任過史丹福大學計算機系人工智慧實驗室的顧問教授。他是OpenCV庫的創始人,是一名享有廣泛聲譽的演講人、開源社區的積極參與者。
圖書目錄
譯者序 xvii
前言 xxi
第1章 概述 1
什麼是OpenCV 1
OpenCV怎么用 2
什麼是計算機視覺 3
OpenCV的起源 6
OpenCV的結構 7
使用IPP來加速OpenCV 8
誰擁有OpenCV 9
下載和安裝OpenCV 9
安裝 9
從Git獲取最新的OpenCV 12
更多的OpenCV文檔 13
提供的文檔 13
線上文檔和維基資源 13
OpenCV貢獻庫 15
下載和編譯Contributed模組 16
可移植性16
小結 17
練習 17
第2章 OpenCV初探 19
頭檔案 19
資源20
第一個程式:顯示圖片 21
第二個程式:視頻 23
跳轉 24
簡單的變換28
不那么簡單的變換 30
從攝像頭中讀取 32
寫入AVI檔案 33
小結 34
練習 35
第3章 了解OpenCV的數據類型 37
基礎知識37
OpenCV的數據類型 37
基礎類型概述 38
深入了解基礎類型 39
輔助對象 46
工具函式 53
模板結構 60
小結 61
練習 61
第4章 圖像和大型數組類型 63
動態可變的存儲 63
cv::Mat類N維稠密數組 64
創建一個數組 65
獨立獲取數組元素 69
數組疊代器NAryMatIterator 72
通過塊訪問數組元素 74
矩陣表達式:代數和cv::Mat 75
飽和轉換 77
數組還可以做很多事情 78
稀疏數據類cv::SparesMat 79
訪問稀疏數組中的元素 79
稀疏數組中的特有函式 82
為大型數組準備的模板結構 83
小結 85
練習 86
第5章 矩陣操作 87
矩陣還可以做更多事情 87
cv::abs() 90
cv::add() 91
cv::addWeighted() 92
cv::bitwise_and() 94
cv::bitwise_not() 94
cv::bitwise_or() 94
cv::bitwise_xor() 95
cv::calcCovarMatrix() 95
cv::cartToPolar() 97
cv::checkRange() 97
cv::compare() 98
cv::completeSymm() 99
cv::convertScaleAbs() 99
cv::countNonZero() 100
cv::Mat cv::cvarrToMat() 100
cv::dct() 101
cv::dft() 102
cv::cvtColor() 103
cv::determinant() 106
cv::divide() 106
cv::eigen() 106
cv::exp() 107
cv::extractImageCOI() 107
cv::flip() 108
cv::gemm() 108
cv::getConvertElem()和cv::getConvertScaleElem() 109
cv::idct() 110
cv::inRange() 110
cv::insertImageCOI() 111
cv::invert() 111
cv::log() 112
cv::LUT() 112
cv::Mahalanobis() 113
cv::max() 114
cv::mean() 115
cv::meanStdDev() 116
cv::merge() 116
cv::min() 116
cv::minMaxIdx() 117
cv::minMaxLoc() 118
cv::mixChannels() 119
cv::mulSpectrums() 120
cv::multiply() 121
cv::mulTransposed() 121
cv::norm() 122
cv::normalize() 123
cv::perspectiveTransform()125
cv::phase() 125
cv::polarToCart() 126
cv::pow() 126
cv::randu() 127
cv::randn() 127
cv::repeat() 129
cv::scaleAdd() 129
cv::setIdentity() 130
cv::solve() 130
cv::solveCubic() 131
cv::solvePoly() 132
cv::sort() 132
cv::sortIdx() 133
cv::split() 133
cv::sqrt() 134
cv::subtract() 135
cv::sum() 135
cv::trace() 135
cv::transform() 136
cv::transpose() 136
小結 137
練習 137
第6章 繪圖和注釋 139
繪圖 139
藝術線條和填充多邊形 140
字型和文字 146
小結 148
練習 148
第7章 OpenCV中的函式子 151
操作對象151
主成分分析(cv::PCA) 151
小結 160
練習 160
第8章 圖像、視頻與數據檔案 163
HighGUI模組:一個可移植的圖形工具包 163
圖像檔案的處理 164
圖像的載入與保存 165
關於codecs的一些注釋 167
圖片的編碼與解碼 168
視頻的處理 169
使用cv::VideoCapture對象讀取視頻流 169
使用cv::VideoWriter對象寫入視頻 175
數據存儲176
cv::FileStorage的寫入 177
使用cv::FileStorage讀取檔案 179
cv::FileNode 180
小結 183
練習 183
第9章 跨平台和Windows系統 187
基於Windows開發 187
HighGUI原生圖形用戶接口 188
通過Qt後端工作 199
綜合OpenCV和全功能GUI工具包 209
小結 222
練習 222
第10章 濾波與卷積 225
概覽 225
預備知識225
濾波、核和卷積 225
邊界外推和邊界處理 227
閾值化操作 230
Otsu算法 233
自適應閾值 233
平滑 235
簡單模糊和方框型濾波器236
雙邊濾波器 240
導數和梯度 242
索貝爾導數 242
Scharr濾波器 244
圖像形態學 246
膨脹和腐蝕 247
通用形態學函式 250
開操作和閉操作 251
形態學梯度 254
頂帽和黑帽 256
自定義核 258
用任意線性濾波器做卷積 259
用cv::filter2D()進行卷積 259
通過cv::sepFilter2D使用可分核 260
生成卷積核 260
小結 262
練習 262
第11章 常見的圖像變換 267
概覽 267
拉伸、收縮、扭曲和旋轉 267
均勻調整 268
圖像金字塔 269
不均勻映射 273
仿射變換 274
透視變換 279
通用變換282
極坐標映射 282
LogPolar 283
任意映射 287
圖像修復287
圖像修復 288
去噪289
cv::equalizeHist()用於對比均衡 294
小結 295
練習 295
第12章 圖像分析 297
概覽 297
離散傅立葉變換 297
cv::idft()用於離散傅立葉逆變換 300
cv::mulSpectrums()頻譜乘法 300
使用傅立葉變換進行卷積301
cv::idct()離散餘弦逆變換304
積分圖 304
cv::integral()標準求和積分 306
cv::integral()平方求和積分 306
cv::integral()傾斜求和積分 307
Canny邊緣檢測 307
cv::Canny() 309
Hough變換 309
Hough線變換 309
Hough圓變換 313
距離變換316
cv::distanceTransform()無標記距離變換 317
cv::distanceTransform()有標記距離變換 317
分割 318
漫水填充 318
Grabcuts算法 323
Mean-Shift分割算法 325
小結 326
練習 326
第13章 直方圖和模板329
OpenCV中直方圖的表示 331
cv::calcHist():從數據創建直方圖 332
基本直方圖操作 334
直方圖歸一化 334
直方圖二值化 335
找出最顯著的區間 335
比較兩個直方圖 337
直方圖用法示例 339
一些複雜的直方圖方法 342
EMD距離 342
反向投影 347
模板匹配350
方差匹配方法(cv::TM_SQDIFF) 351
歸一化方差匹配方法(cv::TM_SQDIFF_NORMED) 352
相關性匹配方法(cv::TM_CCORR) 352
歸一化的互相關匹配方法(cv::TM_CCORR_NORMED) 352
相關係數匹配方法(cv::TM_CCOEFF) 352
歸一化的相關係數匹配方法(cv::TM_CCOEFF_NORMED) 352
小結 355
練習 355
第14章 輪廓 359
輪廓查找359
輪廓層次 360
繪製輪廓 364
輪廓實例 365
另一個輪廓實例 366
快速連通區域分析 368
深入分析輪廓 370
多邊形逼近 370
幾何及特性概括 372
幾何學測試 377
匹配輪廓與圖像 378
矩 378
再論矩 380
使用Hu矩進行匹配 383
利用形狀場景方法比較輪廓 384
小結 388
練習 389
第15章 背景提取 391
背景提取概述 391
背景提取的缺點 392
場景建模392
像素393
幀間差分 396
平均背景法 397
累計均值,方差和協方差403
更複雜的背景提取方法 410
結構413
進行背景學習 414
存在移動的前景物體時進行背景學習 417
背景差分:檢測前景物體418
使用碼書法的背景模型 419
關於碼書法的其他想法 419
使用連通分量進行前景清理 420
小測試 423
兩種背景方法的對比 425
OpenCV中的背景提取方法的封裝 425
cv::BackgroundSubstractor基類 426
KB方法 427
Zivkovic方法 428
小結 431
練習 431
第16章 關鍵點和描述子 433
關鍵點和跟蹤基礎 433
角點檢測 434
光流簡介 437
Lucas-Kanade稀疏光流法438
廣義關鍵點和描述符 448
光流,跟蹤和識別 450
OpenCV一般如何處理關鍵點和描述符 451
核心關鍵點檢測方法 461
關鍵點過濾 497
匹配方法 499
結果顯示 505
小結 508
練習 508
第17章 跟蹤 511
跟蹤中的概念 511
稠密光流512
Farneback多項式擴展算法513
Dual TV-L1模型 515
簡單光流算法 519
Mean-Shift算法和Camshift 追蹤 522
Mean-Shift算法 522
Camshift 526
運動模板526
估計 533
擴展卡爾曼濾波器簡述 549
小結 551
練習 551
第18章 相機模型與標定 553
相機模型554
射影幾何基礎 556
Rodrigues變換 558
透鏡畸變 559
標定 562
旋轉矩陣和平移向量 563
標定板 566
單應性 572
相機標定 576
矯正 587
矯正映射 587
使用cv::convertMaps()在不同表示方式之間轉換矯正映射 588
使用cv::initUndistortRectifyMap()計算矯正映射 589
使用cv::remap()矯正圖像591
使用cv::undistort()進行矯正 591
使用cv::undistortPoints()進行稀疏矯正 591
與標定結合 592
小結 595
練習 596
第19章 投影與三維視覺 599
投影 600
仿射變換與透視變換 601
鳥瞰圖變換實例 602
三維姿態估計 606
單攝像機姿態估計 607
立體成像609
三角測量 610
對極幾何 613
本徵矩陣和基本矩陣 615
計算極線 624
立體校正 624
立體校正 628
立體匹配 638
立體校正、標定和對應的示例代碼 650
來自三維重投影的深度映射 657
來自運動的結構 659
二維與三維直線擬合 659
小結 662
練習 662
第20章 機器學習基礎665
什麼是機器學習 665
訓練集和測試集 666
有監督學習和無監督學習667
生成式模型和判別式模型669
機器學習在視覺中的套用671
變數的重要性 673
診斷機器學習中的問題 674
ML庫中遺留的機器學習算法 678
K均值 679
馬氏距離 684
小結 687
練習 687
第21章 StatModel:OpenCV中的基準學習模型 689
ML庫中的常見例程 689
訓練方法和cv::ml::TrainData的結構 691
預測697
使用cv::StatModel的機器學習算法 698
二叉決策樹 703
Boosting方法 716
隨機森林 721
期望最大化算法 725
多層感知機 731
支持向量機 739
小結 749
練習 750
第22章 目標檢測 753
基於樹的目標檢測技術 753
級聯分類器 754
有監督學習和boosting理論 756
學習新目標 764
Latent SVM用於目標識別772
Bag of Words算法與語義分類 775
小結 780
練習 780
第23章 OpenCV的未來 783
過去與未來 783
OpenCV 3.x 784
我們上一次預測怎么樣? 784
未來套用785
目前GSoC的進展 787
社區貢獻 788
OpenCV.org 789
一些關於AI的猜測 790
結語 793
附錄A 平面劃分 795
附錄B opencv_contrib模組概述 809
附錄C 標定圖案 813
參考文獻 819