OpenCV3編程入門

2015年毛星雲等人所著書籍

《OpenCV3編程入門》是2015年電子工業出版社出版的圖書,作者是毛星雲 冷雪飛 王碧輝 吳松森。

內容簡介


OpenCV計算機視覺領域扮演著重要的角色。作為一個基於開源發行的跨平台計算機視覺庫,OpenCV實現了圖像處理和計算機視覺方面的很多通用演演算法。《OpenCV3編程入門》以當前最新版本的OpenCV最常用最核心的組件模塊為索引,深入淺出地介紹了OpenCV2和OpenCV3中的強大功能、性能,以及新特性。書本配套的OpenCV2和OpenCV3雙版本的示例代碼包中,含有總計兩百多個詳細註釋的程序源代碼與思路說明。讀者可以按圖索驥,按技術方向進行快速上手和深入學習。
《OpenCV3編程入門》要求讀者具有基礎的C/C++知識,適合研究計算機視覺以及相關領域的在校學生和老師、初次接觸OpenCV但有一定C/C++編程基礎的研究人員,以及已有過OpenCV 1.0編程經驗,想快速了解並上手OpenCV2、OpenCV3編程的計算機視覺領域的專業人員。《OpenCV3編程入門》也適合於圖像處理、計算機視覺領域的業餘愛好者、開源項目愛好者做為通向新版OpenCV的參考手冊之用。
《OpenCV3編程入門》配套的【示常式序】、【.exe可執行文件】、【書內彩圖】的下載鏈接可通過掃描《OpenCV3編程入門》封底后勒口的二維碼獲取。
OpenCV3編程入門(細緻分析OpenCV編程技巧,深入了解最前沿的計算機視覺編程技術)
毛星雲 冷雪飛 王碧輝 吳松森 編著
ISBN 978-7-121-25331-7
2015年2月出版
定價:79.00元
456頁
16開
本書站在浪潮之巔,零距離接觸最前沿的計算機視覺編程技術
全面涵蓋OpenCV2、OpenCV3雙版本的核心編程技巧
附贈OpenCV2、OpenCV3雙版本總計200餘個配套示常式序源代碼

目錄


第一部分 快速上手OpenCV 1
第1章 邂逅OpenCV 3
1.1 OpenCV周邊概念認知 4
1.1.1 圖像處理、計算機視覺與OpenCV 4
1.1.2 OpenCV概述 4
1.1.3 起源及發展 5
1.1.4 應用概述 6
1.2 OpenCV基本架構分析 7
1.3 OpenCV3帶來了什麼 11
1.3.1 項目架構的改變 11
1.3.2 將OpenCV2代碼升級到OpenCV3報錯時的一些策略 12
1.4 OpenCV的下載、安裝與配置 14
1.4.1 預準備:下載和安裝集成開發環境 14
1.4.2 第一步:下載和安裝OpenCV SDK 15
1.4.3 第二步:配置環境變數 16
1.4.4 第三步:工程包含(include)目錄的配置 17
1.4.5 第四步:工程庫(lib)目錄的配置 21
1.4.6 第五步:鏈接庫的配置 22
1.4.7 第六步:在Windows文件夾下加入OpenCV動態鏈接庫 25
1.4.8 第七步:最終測試 26
1.4.9 可能遇到的問題和解決方案 27
1.5 快速上手OpenCV圖像處理 28
1.5.1 第一個程序:圖像顯示 29
1.5.2 第二個程序:圖像腐蝕 30
1.5.3 第三個程序:圖像模糊 31
1.5.4 第四個程序:canny邊緣檢測 32
1.6 OpenCV視頻操作基礎 34
1.6.1 讀取並播放視頻 34
1.6.2 調用攝像頭採集圖像 35
1.7 本章小結 38
第2章 啟程前的認知準備 39
2.1 OpenCV官方常式引導與賞析 40
2.1.1 彩色目標跟蹤:Camshift 41
2.1.2 光流:optical flow 42
2.1.3 點追蹤:lkdemo 43
2.1.4 人臉識別:objectDetection 43
2.1.5 支持向量機引導 44
2.2 開源的魅力:編譯OpenCV源代碼 45
2.2.1 下載安裝CMake 45
2.2.2 使用CMake生成OpenCV源代碼工程的解決方案 46
2.2.3 編譯OpenCV源代碼 50
2.3 “opencv.hpp”頭文件認知 53
2.4 命名規範約定 54
2.5 argc與argv參數解惑 56
2.5.1 初識main函數中的argc和argv 56
2.5.2 argc、argv的具體含義 57
2.5.3 Visual Studio中main函數的幾種寫法說明 58
2.5.4 總結 59
2.6 格式輸出函數printf()簡析 59
2.6.1 格式輸出:printf()函數 59
2.6.2 示常式序:printf函數的用法示例 60
2.7 智能顯示當前使用的OpenCV版本 61
2.8 本章小結 61
第3章 HighGUI圖形用戶界面初步 63
3.1 圖像的載入、顯示和輸出到文件 64
3.1.1 OpenCV的命名空間 64
3.1.2 Mat類簡析 64
3.1.3 圖像的載入與顯示概述 65
3.1.4 圖像的載入:imread()函數 65
3.1.5 圖像的顯示:imshow()函數 66
3.1.6 關於InputArray類型 67
3.1.7 創建窗口:namedWindow()函數 67
3.1.8 輸出圖像到文件:imwrite()函數 68
3.1.9 綜合示常式序:圖像的載入、顯示與輸出 70
3.2 滑動條的創建和使用 73
3.2.1 創建滑動條:createTrackbar()函數 73
3.2.2 獲取當前軌跡條的位置:getTrackbarPos()函數 76
3.3 滑鼠操作 76
3.4 本章小結 80
第二部分 初探core組件 83
第4章 OpenCV數據結構與基本繪圖 85
4.1 基礎圖像容器Mat 86
4.1.1 數字圖像存儲概述 86
4.1.2 Mat結構的使用 86
4.1.3 像素值的存儲方法 88
4.1.4 顯式創建Mat對象的七種方法 89
4.1.5 OpenCV中的格式化輸出方法 91
4.1.6 輸出其他常用數據結構 94
4.1.7 示常式序:基礎圖像容器Mat類的使用 95
4.2 常用數據結構和函數 95
4.2.1 點的表示:Point類 96
4.2.2 顏色的表示:Scalar類 96
4.2.3 尺寸的表示:Size類 96
4.2.4 矩形的表示:Rect類 97
4.2.5 顏色空間轉換:cvtColor()函數 98
4.2.6 其他常用的知識點 100
4.3 基本圖形的繪製 100
4.3.1 DrawEllipse()函數的寫法 101
4.3.2 DrawFilledCircle()函數的寫法 102
4.3.3 DrawPolygon()函數的寫法 102
4.3.4 DrawLine()函數的寫法 103
4.3.5 main函數的寫法 104
4.4 本章小結 106
第5章 core組件進階 107
5.1 訪問圖像中的像素 108
5.1.1 圖像在內存之中的存儲方式 108
5.1.2 顏色空間縮減 108
5.1.3 LUT函數:Look up table操作 109
5.1.4 計時函數 110
5.1.5 訪問圖像中像素的三類方法 110
5.1.6 示常式序 114
5.2 ROI區域圖像疊加&圖像混合 114
5.2.1 感興趣區域:ROI 115
5.2.2 線性混合操作 116
5.2.3 計算數組加權和:addWeighted()函數 117
5.2.4 綜合示例:初級圖像混合 120
5.3 分離顏色通道、多通道圖像混合 125
5.3.1 通道分離:split()函數 125
5.3.2 通道合併:merge()函數 126
5.3.3 示常式序:多通道圖像混合 127
5.4 圖像對比度、亮度值調整 131
5.4.1 理論依據 131
5.4.2 訪問圖片中的像素 131
5.4.3 示常式序:圖像對比度、亮度值調整 132
5.5 離散傅里葉變換 135
5.5.1 離散傅里葉變換的原理 135
5.5.2 dft()函數詳解 136
5.5.3 返回DFT最優尺寸大小:getOptimalDFTSize()函數 137
5.5.4 擴充圖像邊界:copyMakeBorder()函數 137
5.5.5 計算二維矢量的幅值:magnitude()函數 138
5.5.6 計算自然對數:log()函數 138
5.5.7 矩陣歸一化:normalize()函數 138
5.5.8 示常式序:離散傅里葉變換 139
5.6 輸入輸出XML和YAML文件 144
5.6.1 XML和YAML文件簡介 144
5.6.2 FileStorage類操作文件的使用引導 144
5.6.3 示常式序:XML和YAML文件的寫入 147
5.6.4 示常式序:XML和YAML文件的讀取 148
5.7 本章小結 150
第三部分 掌握imgproc組件 151
第6章 圖像處理 153
6.1 線性濾波:方框濾波、均值濾波高斯濾波 154
6.1.1 平滑處理 154
6.1.2 圖像濾波與濾波器 154
6.1.3 線性濾波器的簡介 155
6.1.4 濾波和模糊 155
6.1.5 鄰域運算元與線性鄰域濾波 155
6.1.6 方框濾波(box Filter) 156
6.1.7 均值濾波 157
6.1.8 高斯濾波 159
6.1.9 線性濾波相關OpenCV源碼剖析 160
6.1.10 OpenCV中GaussianBlur函數源碼剖析 164
6.1.11 線性濾波核心API函數 165
6.1.12 圖像線性濾波綜合示例 170
6.2 非線性濾波:中值濾波、雙邊濾波 175
6.2.1 非線性濾波概述 175
6.2.2 中值濾波 175
6.2.3 雙邊濾波 177
6.2.4 非線性濾波相關核心API函數 178
6.2.5 OpenCV中的5種圖像濾波綜合示例 181
6.3 形態學濾波(1):腐蝕與膨脹 187
6.3.1 形態學概述 187
6.3.2 膨脹 188
6.3.3 腐蝕 189
6.3.4 相關OpenCV源碼分析溯源 190
6.3.5 相關核心API函數講解 191
6.3.6 綜合示例:腐蝕與膨脹 195
6.4 形態學濾波(2):開運算、閉運算、形態學梯度、頂帽、黑帽 198
6.4.1 開運算 199
6.4.2 閉運算 200
6.4.3 形態學梯度 200
6.4.4 頂帽 201
6.4.5 黑帽 202
6.4.6 形態學濾波OpenCV源碼分析溯源 203
6.4.7 核心API函數:morphologyEx() 205
6.4.8 各形態學操作使用範例一覽 206
6.4.9 綜合示例:形態學濾波 208
6.5 漫水填充 214
6.5.1 漫水填充的定義 214
6.5.2 漫水填充法的基本思想 214
6.5.3 實現漫水填充演演算法:floodFill函數 214
6.5.4 綜合示例:漫水填充 216
6.6 圖像金字塔與圖片尺寸縮放 223
6.6.1 引言 223
6.6.2 關於圖像金字塔 223
6.6.3 高斯金字塔 225
6.6.4 拉普拉斯金字塔 226
6.6.5 尺寸調整:resize()函數 227
6.6.6 圖像金字塔相關API函數 230
6.6.7 綜合示例:圖像金字塔與圖片尺寸縮放 234
6.7 閾值化 237
6.7.1 固定閾值操作:Threshold()函數 238
6.7.2 自適應閾值操作:adaptiveThreshold()函數 239
6.7.3 示常式序:基本閾值操作 240
6.8 本章小結 244
第7章 圖像變換 247
7.1 基於OpenCV的邊緣檢測 248
7.1.1 邊緣檢測的一般步驟 248
7.1.2 canny運算元 248
7.1.3 sobel運算元 253
7.1.4 Laplacian 運算元 256
7.1.5 scharr濾波器 259
7.1.6 綜合示例:邊緣檢測 262
7.2 霍夫變換 267
7.2.1 霍夫變換概述 267
7.2.2 OpenCV中的霍夫線變換 268
7.2.3 霍夫線變換的原理 268
7.2.4 標準霍夫變換:HoughLines()函數 270
7.2.5 累計概率霍夫變換:HoughLinesP()函數 272
7.2.6 霍夫圓變換 274
7.2.7 霍夫梯度法的原理 275
7.2.8 霍夫梯度法的缺點 276
7.2.9 霍夫圓變換:HoughCircles()函數 276
7.2.10 綜合示例:霍夫變換 278
7.3 重映射 281
7.3.1 重映射的概念 281
7.3.2 實現重映射:remap()函數 282
7.3.3 基礎示常式序:基本重映射 283
7.3.4 綜合示常式序:實現多種重映射 285
7.4 仿射變換 289
7.4.1 認識仿射變換 289
7.4.2 仿射變換的求法 290
7.4.3 進行仿射變換:warpAffine()函數 291
7.4.4 計算二維旋轉變換矩陣:getRotationMatrix2D()函數 292
7.4.5 示常式序:仿射變換 292
7.5 直方圖均衡化 295
7.5.1 直方圖均衡化的概念和特點 296
7.5.2 實現直方圖均衡化:equalizeHist()函數 297
7.5.3 示常式序:直方圖均衡化 298
7.6 本章小結 300
第8章 圖像輪廓與圖像分割修復 303
8.1 查找並繪製輪廓 304
8.1.1 尋找輪廓:findContours()函數 304
8.1.2 繪製輪廓:drawContours()函數 305
8.1.3 基礎示常式序:輪廓查找 306
8.1.4 綜合示常式序:查找並繪製輪廓 308
8.2 尋找物體的凸包 312
8.2.1 凸包 312
8.2.2 尋找凸包:convexHull()函數 313
8.2.3 基礎示常式序:凸包檢測基礎 313
8.2.4 綜合示常式序:尋找和繪製物體的凸包 315
8.3 使用多邊形將輪廓包圍 318
8.3.1 返回外部矩形邊界:boundingRect()函數 318
8.3.2 尋找最小包圍矩形:minAreaRect()函數 318
8.3.3 尋找最小包圍圓形:minEnclosingCircle()函數 318
8.3.4 用橢圓擬合二維點集:fitEllipse()函數 319
8.3.5 逼近多邊形曲線:approxPolyDP()函數 319
8.3.6 基礎示常式序:創建包圍輪廓的矩形邊界 319
8.3.7 基礎示常式序:創建包圍輪廓的圓形邊界 321
8.3.8 綜合示常式序:使用多邊形包圍輪廓 324
8.4 圖像的矩 327
8.4.1 矩的計算:moments()函數 328
8.4.2 計算輪廓面積:contourArea()函數 328
8.4.3 計算輪廓長度:arcLength()函數 328
8.4.4 綜合示常式序:查找和繪製圖像輪廓矩 329
8.5 分水嶺演演算法 333
8.5.1 實現分水嶺演演算法:watershed()函數 334
8.5.2 綜合示常式序:分水嶺演演算法 334
8.6 圖像修補 338
8.6.1 實現圖像修補:inpaint()函數 340
8.6.2 綜合示常式序:圖像修補 341
8.7 本章小結 343
第9章 直方圖與匹配 345
9.1 圖像直方圖概述 346
9.2 直方圖的計算與繪製 347
9.2.1 計算直方圖:calcHist()函數 347
9.2.2 找尋最值:minMaxLoc()函數 348
9.2.3 示常式序:繪製H—S直方圖 348
9.2.4 示常式序:計算並繪製圖像一維直方圖 350
9.2.5 示常式序:繪製RGB三色直方圖 352
9.3 直方圖對比 355
9.3.1 對比直方圖:compareHist()函數 355
9.3.2 示常式序:直方圖對比 356
9.4 反向投影 360
9.4.1 引言 360
9.4.2 反向投影的工作原理 360
9.4.3 反向投影的作用 361
9.4.4 反向投影的結果 361
9.4.5 計算反向投影:calcBackProject()函數 361
9.4.6 通道複製:mixChannels()函數 362
9.4.7 綜合程序:反向投影 363
9.5 模板匹配 367
9.5.1 模板匹配的概念與原理 367
9.5.2 實現模板匹配:matchTemplate()函數 367
9.5.3 綜合示例:模板匹配 369
9.6 本章小結 373
第四部分 深入feature2d組件 375
第10章 角點檢測 377
10.1 Harris角點檢測 378
10.1.1 興趣點與角點 378
10.1.2 角點檢測 378
10.1.3 harris角點檢測 379
10.1.4 實現Harris角點檢測:cornerHarris()函數 379
10.1.5 綜合示例:harris角點檢測與繪製 381
10.2 Shi-Tomasi角點檢測 384
10.2.1 Shi-Tomasi角點檢測概述 384
10.2.2 確定圖像強角點:goodFeaturesToTrack()函數 384
10.2.3 綜合示例:Shi-Tomasi角點檢測 385
10.3 亞像素級角點檢測 388
10.3.1 背景概述 388
10.3.2 尋找亞像素角點:cornerSubPix()函數 389
10.3.3 綜合示例:亞像素級角點檢測 389
10.4 本章小結 392
第11章 特徵檢測與匹配 395
11.1 SURF特徵點檢測 396
11.1.1 SURF演演算法概覽 396
11.1.2 SURF演演算法原理 396
11.1.3 SURF類相關OpenCV源碼剖析 400
11.1.4 繪製關鍵點:drawKeypoints()函數 401
11.1.5 KeyPoint類 402
11.1.6 示常式序:SURF特徵點檢測 402
11.2 SURF特徵提取 405
11.2.1 繪製匹配點:drawMatches()函數 405
11.2.2 BruteForceMatcher類源碼分析 407
11.2.3 示常式序:SURF特徵提取 408
11.3 使用FLANN進行特徵點匹配 410
11.3.1 FlannBasedMatcher類的簡單分析 410
11.3.2 找到最佳匹配:DescriptorMatcher::match方法 411
11.3.3 示常式序: 使用FLANN進行特徵點匹配 411
11.3.4 綜合示常式序:FLANN結合SURF進行關鍵點的描述和匹配 413
11.3.5 綜合示常式序:SIFT配合暴力匹配進行關鍵點描述和提取 417
11.4 尋找已知物體 420
11.4.1 尋找透視變換:findHomography()函數 421
11.4.2 進行透視矩陣變換:perspectiveTransform()函數 421
11.4.3 示常式序: 尋找已知物體 422
11.5 ORB特徵提取 425
11.5.1 ORB演演算法概述 425
11.5.2 相關概念認知 425
11.5.3 ORB類相關源碼簡單分析 426
11.5.4 示常式序:ORB演演算法描述與匹配 426
11.6 本章小結 430
附錄 433
A1 配套示常式序清單 433
A2 隨書額外附贈的程序一覽 436
A3 書本核心函數清單 439
A4 Mat類函數一覽 442
A4.1 構造函數:Mat::Mat 442
A4.2 析構函數Mat::~Mat 444
A4.3 Mat類成員函數 444
主要參考文獻 447
作者簡介
毛星雲,90后,網路ID“淺墨”。微軟VC++領域最具價值專家(MVP),中國2013年度十大傑出IT博客作者,南京航空航天大學2014年度十大傑出青年。CSDN博客專家,2013年度CSDN博客之星,於CSDN寫博數年,博客瀏覽量已逾252萬人次。本科畢業於烏克蘭國立航空航天大學以及南京航空航天大學,碩士就讀於南京航空航天大學。已出版著作《逐夢旅程:Windows遊戲編程之從零開始》,個人事迹曾多次被人民網新華網鳳凰網、網易新聞、新浪新聞、金陵晚報、現代快報等主流媒體報道。
前言
計算機視覺是一個近幾年來日臻成熟的領域。隨著運算性能強勁而又價格實惠的計算設備的不斷問世,創建複雜的圖像應用從未像今天這般容易。OpenCV在計算機視覺領域扮演著重要的角色,它是一個基於開源發行的跨平台計算機視覺庫,實現了圖像處理和計算機視覺方面的很多通用演演算法。自1999年問世以來,OpenCV已經被計算機視覺領域的學者和開發者視為首選工具,並成為了計算機視覺領域最有力的研究工具之一。
OpenCV最初由Intel的一個小組進行開發。在一系列的beta版本后,OpenCV 1.0正式版本終於在2006年10月19日發布。
2009年10月1日,OpenCV 2.0問世,它帶來了全新的C++介面,將OpenCV的能力無限放大。在2.0的時代,OpenCV增加了全新的平台支持,包括iOS和Andriod,通過CUDAOpenCL實現了GPU加速,為PythonJava用戶提供了介面,基於GithubBuildbot構建了充滿藝術感的持續集成的系統,所以才有了被全世界的很多公司和學校所採用的穩定易用的OpenCV 2.4.x。
2014年8月21日,OpenCV 3.0 Alpha發布,它帶來了全新的項目架構的改變,宣告了計算機視覺新時代的來臨。和其他大型項目一樣,OpenCV3拋棄了整體統一架構,使用內核+插件的架構形式,讓自身主體更加穩定,而附加的庫則可以更加靈活多變,以保持高速的發展與迭代。
本書源自於筆者在CSDN上連載的名為“OpenCV入門教程”的系列博客文章,自2014年2月24日發表第一篇以來,得到了廣大OpenCV愛好者的廣泛關注與支持,累計閱讀量突破了40多萬人次。不少讀者強烈希望將這些內容集結成書,並加入更多新的內容。於是,經過筆者半年的筆耕不輟,便有了現在這本書的誕生。
作為一本入門級的OpenCV編程教材,本書以詳細註釋的程序代碼為主線,以新版OpenCV最核心的core、HighGUI、improc和feature2d這4個組件的相關函數、類和數據結構為出發點,詳細講解了學習新版本OpenCV中會遇到了各種問題,並提供了詳盡的實戰代碼作為參考。本書的寫作初衷是讓更多的使用者能熟練使用採用新版C++介面的OpenCV2或OpenCV3,了解OpenCV2和OpenCV3的諸多細節上的區別,以推動新版OpenCV在世界範圍內的普及。
本書的內容安排
本書分為4個部分、11個章節,現將內容梗概列舉如下。
第1章 邂逅OpenCV:介紹OpenCV的周邊概念,分析OpenCV的基本架構,講解OpenCV3的新特性。本章重點講解了OpenCV的下載、安裝與配置過程;在配置完成後,帶領大家正式領略OpenCV的魅力,講解了4個OpenCV圖像處理小程序,並指導大家學習如何使用OpenCV操作視頻和調用攝像頭。
第2章 啟程前的認知準備:進行OpenCV官方常式的引導學習與賞析,講解如何編譯OpenCV的源代碼,並引入了對一些周邊概念的認知。
第3章 HighGUI圖形用戶界面初步:對圖像的載入、顯示和輸出到文件進行詳細地分析,講解OpenCV中滑動條的創建和使用,以及如何用滑鼠進行交互操作。
第4章 OpenCV數據結構與基本繪圖:講解OpenCV中常用的數據結構以及基本的繪圖操作。
第5章 core組件進階:講解core模塊的一些進階知識點,如操作圖像中的像素、圖像混合、分離顏色通道、調節圖像的對比度和亮度、進行離散傅里葉變換,以及輸入輸出XML和YAML文件。
第6章 圖像處理:學習各種利用OpenCV進行圖像處理的方法,包括屬於線性濾波的方框濾波、均值濾波與高斯濾波,屬於非線性濾波的中值濾波、雙邊濾波;兩種基本形態學操作——膨脹與腐蝕;5種高級形態學濾波操作——開運算、閉運算、形態學梯度、頂帽以及黑帽;此外,還有漫水填充演演算法圖像金字塔、圖像縮放、閾值化。
第7章 圖像變換:講解多種類型的圖像變換方法。包括利用OpenCV進行邊緣檢測所用到的canny運算元、sobel運算元,Laplace運算元以及scharr濾波器;進行圖像特徵提取的霍夫線變換、霍夫圓變換,重映射和仿射變換以及直方圖均衡化。
第8章 圖像輪廓與圖像分割修復:講解如何查找輪廓並繪製輪廓,如何尋找物體的凸包,使用多邊形來包圍輪廓,以及計算一個圖像的矩。此外還介紹了分水嶺演演算法和圖像修補操作的實現方法。
第9章 直方圖與匹配:講解圖像直方圖相關的編程技巧,以及直方圖對比、反向投影和模板匹配技術。
第10章 角點檢測:講解Harris角點檢測和Shi-Tomasi角點檢測,以及一種亞像素角點檢測方法。
第11章 特徵檢測與匹配:使用OpenCV2講解並實現了SURFSIFTORB特徵檢測方法,並在FLANN特徵匹配的基礎上,進一步實現了利用Homography映射來找出已知物體。
適合閱讀本書的讀者
研究計算機視覺以及相關領域的在校學生和老師
本書擁有詳實的內容,註釋詳盡的代碼,會是助你通過OpenCV來研習計算機視覺理論、撰寫論文、通過畢業設計、完成科研項目的得力工具。同時,本書適合作為大學計算機視覺課程的教學用書。
初次接觸OpenCV、有一定C/C++編程基礎的研究人員
作為一本定位為快速入門新版OpenCV標準的編程教程,本書需要的僅僅是一些簡單的C/C++編程語言基礎。如果你已經具備了這些基礎,並對計算機視覺感興趣,那麼本書正是為你所準備的。
已經有過OpenCV1.0編程經驗,想快速了解並上手OpenCV2、OpenCV3編程的計算機視覺領域的專業人員
如果你曾經使用過OpenCV1.0,或者研讀過OpenCV1.0時代的經典著作《Learning OpenCV》,本書會讓你倍感親切。你會發現新版OpenCV帶了更多強大和便利的特性,讓你事半功倍,如虎添翼。
想擁有一本新版OpenCV介面工具書的計算機視覺愛好者
本書中將自OpenCV2以來(包括OpenCV3)的常用類和函數進行了詳細地講解,並在附錄中提供了“書本核心函數清單”以便檢索。你會在書中快速查找到你需要用到的函數、數據結構和類的用法。
想擁有海量的詳細註釋的OpenCV2、OpenCV3示常式序代碼的OpenCV愛好者
本書包含OpenCV2版的95個書本主線示常式序源代碼、21個附贈示常式序源代碼,OpenCV3版的95個書本主線示常式序源代碼。OpenCV2、OpenCV3兩版代碼提供分開下載。這些程序代碼都經過詳細而有條理的註釋,並提供可以獨立運行的.exe文件供快速查看程序效果,方便查看和檢索。你會在海量的示常式序中找到你需要的參考代碼,從而加速你的研究和學習。
圖像處理、計算機視覺領域的業餘愛好者
海闊憑魚躍,天高任鳥飛,計算機視覺領域的寶庫任你探索。
開源項目愛好者
OpenCV作為一個完全免費並開源代碼開發的計算機視覺代碼庫,有總計上百萬行的源代碼供你研究學習,本書將是引導你學習它們的良師益友。
本書的示常式序說明
本書的示常式序最初都在OpenCV 2.4.9(2014年4月15日面世)版本下開發,書稿初版也是基於OpenCV2.4.9而寫。在書稿寫作和修訂過程中,恰逢OpenCV3.0 Alpha(2014年8月21日)和OpenCV3 Beta(2014年11月11日)的發布,所以本書在審校和修訂過程中(2014年12月1日),決定站在浪潮之巔,以OpenCV2為主,加入OpenCV3的諸多特性,讓這本書可以同時勝任OpenCV2和OpenCV3兩個版本教材的角色。這也是為什麼本書會有OpenCV2和OpenCV3兩個獨立版本的示常式序的原因。
兩個版本、詳細註釋的100多個示常式序源代碼是本書的靈魂,現將示常式序的相關情況概括如下。
本書包含OpenCV2版的95個書本主線示常式序源代碼、21個附贈示常式序源代碼,以及OpenCV3版的95個書本主線示常式序源代碼。
OpenCV2、OpenCV3兩版代碼提供分開下載。
OpenCV2版的示常式序在Windows7 64位旗艦版、Visual Stuido 2010 、OpenCV2.4.9的環境下開發與測試,理論上支持OpenCV2系列的所有版本的編譯運行。
OpenCV3版的示常式序在Windows7 64位旗艦版、Visual Stuido 2010 、OpenCV3.0 beta的環境下開發與測試,理論上支持目前已經發布的OpenCV3全版本。
程序源代碼都經過詳細而有條理的註釋。
額外提供可以獨立運行的.exe文件供快速查看程序效果,並方便檢索。
本書配套示例代碼的下載方式有以下幾種。
掃描本書封面后勒口的二維碼,得到下載地址。
在作者博客中單擊相應的書本維護博文里貼出的下載鏈接。
在電子工業出版社的官方網站中進行下載。
致謝
首先需要感謝我的導師,南京航空航天大學冷雪飛教授的知遇之恩,她也親自參與撰寫了本書的部分章節。在攻讀碩士學位階段,如果沒有導師的諄諄教誨,我不會和OpenCV相遇,也就不會有此書的出版。
感謝我的同門師兄王碧輝與吳松森參與撰寫本書的部分章節,他們為本書的完善做出了卓越的貢獻。
感謝OpenCV開發團隊為世界研發出如此強大且穩定、易用的計算機開源視覺庫,並持續不斷地對其進行維護與更新。
感謝父母將我養育成人,感謝家人們的噓寒問暖,你們是我最堅強的後盾。
感謝母校南京航空航天大學賜予我一顆不甘平庸、上下求索的心。
感謝南京航空航天大學的戴泉晨老師對本書出版所做出的幫助與支持。
感謝國家自然科學基金青年科學基金項目“新型單定子二自由度超聲電機及其驅動的智能雲台系統的關鍵技術研究”(項目批准號:51205193)對本書理論研究方面提供的經費支持。
感謝電子工業出版社博文視點的陳曉猛和丁一瓊編輯為本書的出版所做的大量的工作,他們對出版物的專業和嚴謹的態度給我留下了深刻的印象。
最後,需要感謝我博客上的眾多讀者們,是你們對這本書的期待和熱情的留言讓我有了完成這本書的動力和勇氣。
交流與勘誤
由於編者水平有限,書籍即使經過了多次的校對,也難免會有疏漏之處。希望書本前的你,能夠熱心地指出書本中錯誤,以便在這本書下一版印刷的時候,能以一個更完美更嚴謹的樣子,呈現在大家的面前。另外,你要相信你不是一個人在戰鬥,在作者的博客中,可以找到與自己志同道合的眾多喜歡計算機視覺編程技術的愛好者們。我們可以一同交流,共同學習進步。
最後,願大家在本書的幫助下,都能很好地入門和掌握新版OpenCV。
願本書能為新版OpenCV在國內的普及以及在世界範圍內的發展,獻上綿薄之力。
淺墨
2014年12月於南京