OpenCV是一個開源、跨平臺的計算機(jī)視覺庫,近年來成為了初學(xué)者快速入門計算機(jī)視覺的首選工具之一。本書旨在讓讀者快速實(shí)現(xiàn)從入門到掌握這一工具。
本書首先通過編寫實(shí)用案例來描述OpenCV圖像處理的過程,圍繞案例,解析在圖像處理過程中所使用的功能函數(shù),說明其中參數(shù)調(diào)用配置、使用函數(shù)的原理及其應(yīng)用的場景,并且解析函數(shù)調(diào)用的細(xì)節(jié),讓讀者在學(xué)習(xí)實(shí)用案例的過程中逐漸掌握不同功能函數(shù)的用法、用途,明白其中所使用的條件;其次,通過展示OpenCV庫進(jìn)行圖像和視頻的采集、處理和分析的流程,讓讀者了解、學(xué)習(xí)圖像處理的具體流程框架以及邏輯順序,與案例共同解析,感受到真實(shí)項目中所涉及的應(yīng)用過程。本書先讓讀者了解案例,再分析案例中的函數(shù)調(diào)用,讓讀者對OpenCV圖像處理操作在實(shí)際項目中的具體應(yīng)用過程有更加直觀的感受,這也是本書的亮眼部分。
本書適合計算機(jī)及模式識別、機(jī)械電子工程、自動化等相關(guān)領(lǐng)域的科研人員和工程技術(shù)人員參考使用,也可作為高等學(xué)校智能感知工程、機(jī)械電子工程、電子信息、自動化、計算機(jī)等相關(guān)專業(yè)的本科生和研究生的教學(xué)和參考用書。
基礎(chǔ)知識篇
第1章 C++語言介紹 002
1.1 C++語言程序設(shè)計 002
1.1.1 變量的定義和賦值 002
1.1.2 數(shù)據(jù)類型和運(yùn)算符 003
1.1.3 輸入與輸出 004
1.2 C++語言基本結(jié)構(gòu) 004
1.2.1 順序結(jié)構(gòu) 004
1.2.2 選擇結(jié)構(gòu) 005
1.2.3 循環(huán)結(jié)構(gòu) 006
1.3 C++程序基本結(jié)構(gòu) 007
1.3.1 頭文件 007
1.3.2 命名空間 007
1.3.3 全局變量 008
1.3.4 main()函數(shù) 009
1.3.5 局部變量 011
1.3.6 函數(shù) 011
1.3.7 注釋 012
第2章 OpenCV 概述 014
2.1 OpenCV 介紹 014
2.2 機(jī)器視覺與OpenCV 發(fā)展史 015
2.2.1 機(jī)器視覺發(fā)展史 015
2.2.2 OpenCV發(fā)展史 016
2.3 OpenCV 的應(yīng)用與前景 017
第3章 OpenCV 的環(huán)境搭建 018
3.1 OpenCV 4.7.0 簡介 018
3.2 安裝OpenCV 的準(zhǔn)備工作 018
3.3 安裝步驟 021
3.4 安裝環(huán)境配置 023
OpenCV 基礎(chǔ)應(yīng)用篇
第4章 圖像與視頻的讀取 028
4.1 讀取圖像 028
4.2 讀取視頻 029
4.3 調(diào)用攝像頭 030
4.4 功能函數(shù) 031
4.4.1 Mat類對象 031
4.4.2 VideoCapture類對象 031
4.4.3 讀取圖片、視頻功能函數(shù)“imread” 032
4.4.4 圖片、視頻和攝像頭顯示功能函數(shù)“imshow” 032
4.4.5 圖像刷新功能函數(shù)“waitKey” 032
4.5 代碼演示 033
第5章 圖像和視頻的保存 035
5.1 保存目標(biāo)圖像 035
5.2 圖像保存功能函數(shù)“imwrite” 035
5.3 圖像保存代碼演示 036
5.4 保存目標(biāo)視頻 036
5.5 視頻保存功能函數(shù) 037
5.5.1 視頻寬度屬性函數(shù)“CAP_PROP_FRAME_WIDTH” 037
5.5.2 視頻高度屬性函數(shù)“CAP_PROP_FRAME_HEIGHT” 038
5.5.3 視頻總幀數(shù)屬性函數(shù)“CAP_PROP_FRAME_COUNT” 038
5.5.4 視頻幀率屬性函數(shù)“CAP_PROP_FPS” 038
5.5.5 VideoWriter類對象 038
5.5.6 視頻文件關(guān)閉釋放函數(shù)“release” 039
5.6 視頻保存代碼演示 040
第6章 圖像的預(yù)處理操作 042
6.1 圖像顏色空間轉(zhuǎn)換 042
6.1.1 圖像灰度變換 042
6.1.2 顏色空間轉(zhuǎn)換函數(shù)“cvtColor” 044
6.1.3 圖像灰度變換代碼演示 045
6.2 高斯模糊 045
6.2.1 高斯模糊函數(shù)“GaussianBlur” 047
6.2.2 高斯模糊代碼演示 048
6.3 中值濾波 048
6.3.1 中值濾波函數(shù)“medianBlur” 049
6.3.2 中值濾波代碼演示 050
6.4 邊緣檢測 050
6.4.1 邊緣檢測函數(shù)“Canny” 052
6.4.2 邊緣檢測流程代碼演示 053
6.5 圖像的腐蝕與膨脹 053
6.5.1 圖像二值化函數(shù)“threshold” 055
6.5.2 OTSU算法 056
6.5.3 TRIANGLE (三角法)算法 058
6.5.4 獲取結(jié)構(gòu)元素函數(shù)“getStructuringElement” 059
6.5.5 圖像的膨脹操作函數(shù)“dilate” 060
6.5.6 圖像的腐蝕操作函數(shù)“erode” 060
6.5.7 圖像的膨脹與腐蝕操作代碼演示 061
第7章 圖像的繪制 063
7.1 創(chuàng)建、繪制自定義圖像 063
7.2 功能函數(shù) 065
7.2.1 圖像創(chuàng)建函數(shù)“Mat” 065
7.2.2 圓形繪制函數(shù)“circle” 066
7.2.3 矩形繪制函數(shù)“rectangle” 066
7.2.4 文本放置函數(shù)“putText” 067
7.3 代碼演示 068
OpenCV 進(jìn)階篇
第8章 獲得翹曲圖片 070
8.1 目標(biāo)圖像 070
8.2 獲得目標(biāo)像素點(diǎn)坐標(biāo) 071
8.3 創(chuàng)建結(jié)果像素點(diǎn)坐標(biāo) 071
8.4 獲得圖像透視變換矩陣 072
8.5 圖像透視變換 072
8.5.1 獲取透視變換矩陣函數(shù)“getPerspectiveTransform” 073
8.5.2 透視變換函數(shù)“warpPerspective” 073
8.6 案例優(yōu)化 074
8.7 代碼演示 075
第9章 幾何形狀檢測 076
9.1 目標(biāo)圖像 076
9.2 圖像的預(yù)處理 076
9.3 構(gòu)建檢測識別模塊 078
9.3.1 形狀輪廓檢測標(biāo)記功能 078
9.3.2 形狀輪廓判斷標(biāo)識功能 079
9.4 功能函數(shù) 080
9.4.1 輪廓查找函數(shù)“findContours” 080
9.4.2 弧長計算函數(shù)“arcLength” 082
9.4.3 多邊形擬合函數(shù)“approxPolyDP” 082
9.4.4 邊界矩形函數(shù)“boundingRect” 083
9.4.5 輪廓繪制函數(shù)“drawContours” 083
9.5 案例優(yōu)化 084
9.6 代碼演示 085
第10章 人臉檢測 088
10.1 目標(biāo)圖像 088
10.2 人臉識別相關(guān)概念 089
10.2.1 級聯(lián)分類器 089
10.2.2 Haar人臉特征 089
10.2.3 積分圖加速法 090
10.2.4 AdaBoost學(xué)習(xí)算法 090
10.2.5 強(qiáng)分類器的級聯(lián) 092
10.3 利用級聯(lián)分類器進(jìn)行人臉識別 092
10.4 功能函數(shù) 093
10.4.1 CascadeClassifier 093
10.4.2 detectMultiScale 094
10.5 代碼演示 095
OpenCV 提高篇
第11章 創(chuàng)建顏色選擇器 098
11.1 使用VS 2017 創(chuàng)建顏色選擇器 098
11.1.1 創(chuàng)建調(diào)節(jié)面板 098
11.1.2 HSV顏色空間 099
11.1.3 創(chuàng)建顏色遮罩窗口與視頻捕捉窗口 100
11.1.4 功能函數(shù) 101
11.1.5 案例優(yōu)化 103
11.1.6 代碼演示 104
11.2 使用VS Code 創(chuàng)建顏色選擇器 105
11.2.1 調(diào)用攝像頭 106
11.2.2 視頻翻轉(zhuǎn) 107
11.2.3 進(jìn)行顏色空間轉(zhuǎn)換 108
11.2.4 設(shè)置顏色通道 111
11.2.5 創(chuàng)建遮罩 112
11.2.6 創(chuàng)建窗口 114
11.2.7 創(chuàng)建Trackbar 115
11.2.8 調(diào)節(jié)各個顏色通道值 116
11.2.9 代碼演示 118
第12章 跟蹤、繪制顏色路徑 122
12.1 使用VS 2017 跟蹤、繪制顏色路徑 122
12.1.1 尋找目標(biāo)顏色,獲取顏色輪廓 123
12.1.2 獲取顏色輪廓關(guān)鍵點(diǎn)向量 123
12.1.3 繪制關(guān)鍵點(diǎn)的行動路徑 124
12.1.4 案例優(yōu)化 124
12.1.5 代碼演示 125
12.2 使用VS Code 跟蹤、繪制顏色路徑 128
12.2.1 調(diào)用攝像頭 128
12.2.2 視頻翻轉(zhuǎn) 129
12.2.3 進(jìn)行顏色空間轉(zhuǎn)換 130
12.2.4 設(shè)置顏色通道 130
12.2.5 創(chuàng)建遮罩 131
12.2.6 創(chuàng)建窗口 132
12.2.7 創(chuàng)建Trackbar 133
12.2.8 確定目標(biāo)顏色通道值 135
12.2.9 定義矩陣向量 135
12.2.10 進(jìn)行顏色空間轉(zhuǎn)換 136
12.2.11 輪廓檢測 137
12.2.12 過濾干擾項 138
12.2.13 輪廓繪制 142
12.2.14 矩形繪制 144
12.2.15 創(chuàng)建遮罩 145
12.2.16 顏色檢測 145
12.2.17 圓形繪制 145
12.2.18 軌跡繪制 146
12.2.19 代碼演示 147
第13章 文檔掃描 150
13.1 VS 2017 文檔掃描 150
13.1.1 圖像的預(yù)處理 150
13.1.2 輪廓獲取 151
13.1.3 角點(diǎn)獲取 153
13.1.4 文檔翹曲 154
13.1.5 案例優(yōu)化 155
13.1.6 代碼演示 155
13.2 VS Code 文檔掃描 158
13.2.1 讀取目標(biāo)圖像 158
13.2.2 預(yù)處理:高斯模糊 159
13.2.3 預(yù)處理:邊緣檢測 160
13.2.4 預(yù)處理:膨脹操作 163
13.2.5 預(yù)處理:腐蝕操作 165
13.2.6 定義矩陣向量 166
13.2.7 輪廓檢測 167
13.2.8 過濾干擾項 167
13.2.9 得到輪廓 168
13.2.10 輪廓坐標(biāo)點(diǎn)排序 169
13.2.11 獲得圖像透視變換矩陣 170
13.2.12 圖像透視變換 172
13.2.13 顯示結(jié)果圖像 173
13.2.14 代碼演示 173
OpenCV 技術(shù)篇
第14章 OpenCV 與機(jī)器學(xué)習(xí) 178
14.1 傳統(tǒng)機(jī)器學(xué)習(xí) 178
14.1.1 邏輯回歸 178
14.1.2 K近鄰 179
14.1.3 支持向量機(jī)(SVM) 179
14.1.4 貝葉斯網(wǎng)絡(luò) 180
14.2 OpenCV 與深度學(xué)習(xí) 180
14.2.1 用GoogLeNet模型實(shí)現(xiàn)圖像分類 181
14.2.2 用SSD模型實(shí)現(xiàn)對象檢測 181
14.2.3 用FCN模型實(shí)現(xiàn)圖像分割 182
14.2.4 用CNN模型預(yù)測年齡和性別 182
14.2.5 用GOTURN模型實(shí)現(xiàn)對象跟蹤 182
第15章 基于深度學(xué)習(xí)的路面病害檢測案例 184
15.1 深度學(xué)習(xí)在路面病害檢測中的應(yīng)用背景 184
15.2 數(shù)據(jù)集構(gòu)建 184
15.3 基于DeepLabV3+的路面病害檢測方法 187
15.3.1 模型改進(jìn) 187
15.3.2 評價指標(biāo) 189
15.3.3 模型訓(xùn)練與測試 190
15.3.4 不同模型的對比實(shí)驗 191
15.3.5 不同模型檢測病害的可視化效果對比 192
參考文獻(xiàn) 194