1. 程式人生 > >【《OpenCV3程式設計入門》內容簡介&勘誤&配套原始碼下載

【《OpenCV3程式設計入門》內容簡介&勘誤&配套原始碼下載

經過近一年的沉澱和總結,《OpenCV3程式設計入門》一書終於和大家見面了。

最近有為數不少的小夥伴們發郵件給淺墨建議最好在部落格裡面貼出這本書的目錄,方便大家更好的瞭解這本書的內容。其實最近淺墨實在是有些忙,個人獨立開發的3D ARPG跨平臺遊戲App剛剛登陸安卓平臺,各大應用商店都需要上架,加之各種學業方面的事情,所以這篇文章直到現在才發出來。

OK,先看看《OpenCV程式設計入門》這本書的封面。

和出版的第一本書《逐夢旅程》一樣,這本書的封面依舊是淺墨自己設計的原型和基調。貼一張有影象處理特色的封面圖吧:


好了,言歸正傳。我們來看看這本書的內容。

一、前言

計算機視覺是一個近幾年日臻成熟的領域。隨著運算效能強勁而又實惠的計算裝置的不斷問世,建立複雜的影象應用從未像今天這般容易。OpenCV在計算機視覺領域扮演者重要的角色,它是一個基於開源發行的跨平臺計算機視覺庫,實現了影象處理和計算機視覺方面的很多通用演算法。自1999年問世以來,OpenCV已經被計算機視覺領域的學者和開發者視為首選的工具,成為了計算機視覺領域最有力的研究工具之一。

       OpenCV最初由Intel的一個小組進行開發。在釋出一系列的beta版本後,OpenCV 1.0正式版終於在2006年10月19日釋出。

2009年10月1日,OpenCV2.0問世,它帶來了全新的C++介面,將OpenCV的能力無限放大。在2.0的時代,OpenCV增加了全新的平臺支援,包括iOS和Andriod,通過CUDA和OpenCL實現了GPU加速,為Python和java使用者提供了介面,基於Github和Buildbot構建了充滿藝術感的持續整合的系統,所以才有了被全世界的很多公司和學校所採用的穩定易用的OpenCV 2.4.x。

2014年8月21日,OpenCV3.0Alpha釋出,帶來了全新的專案架構的改變,宣告計算機視覺新時代的來臨。和其他大型專案一樣,OpenCV3拋棄整體統一架構,使用核心+外掛的架構形式,讓自身主體更加穩定,而附加的庫可以更加靈活多變、保持高速的發展與迭代。

本書源自CSDN上連載的一個名為“【OpenCV】入門教程“的系列部落格文章,自2014年2月24日發表第一篇以來,得到了廣大OpenCV愛好者的廣泛關注與支援,累計閱讀量突破了40多萬人次。不少讀者強烈希望將這些內容集結成書,並加入更多新的內容。於是,經過半年的筆耕不輟,便有了現在你手中的這本書的誕生。

作為一本入門級的OpenCV程式設計教材,本書以詳細註釋的程式程式碼為主線,以新版OpenCV最核心的core、highgui、improc和feature2d這四個元件的相關函式、類和資料結構為出發點,詳細講解了學習新版本OpenCV中會遇到了各種問題,並提供詳盡的實戰程式碼參考。本書的寫作初衷是讓更多的使用者能熟練使用採用新版C++介面的OpenCV2或OpenCV3,瞭解OpenCV2和OpenCV3的諸多細節上的區別,以推動新版OpenCV在世界範圍內的普及。

二、內容安排

本書分為四個部分、11個章節,內容梗概列舉如下:

第1章邂逅OpenCV:介紹OpenCV的周邊概念,分析OpenCV的基本架構。講解OpenCV3的新特性。重點講解了OpenCV的下載、安裝與配置過程。配置完成後,帶領大家正式開始領略OpenCV的魅力,接觸了四個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講解和實現了SURF、SIFT和ORB特徵檢測方法,並在FLANN特徵匹配的基礎上,進一步實現了利用Homography對映來找出已知物體。

三、適合閱讀本書的讀者

  • 研究計算機視覺以及相關領域的在校學生和老師

本書擁有翔實的內容,註釋詳盡的程式碼,在計算機視覺領域會是助你通過OpenCV研習計算機視覺理論、撰寫論文、通過畢業設計、完成科研專案的得力助手。同時,本書適合作為大學計算機視覺課程的教學用書。

  • 初次接觸OpenCV、有一定C/C++程式設計基礎的研究人員

作為一本定位為快速入門新版OpenCV標準的程式設計教程,本書需要的僅僅是一些簡單的C/C++程式語言基礎。如果你已經有了一些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 1

第1章 邂逅OpenCV 3

1.1 OpenCV周邊概念認知 4

1.1.1 影象處理、計算機視覺與OpenCV4

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 第一步:下載和安裝OpenCVSDK 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 彩色目標跟蹤:Camshift41

2.1.2 光流:opticalflow 42

2.1.3 點追蹤:lkdemo 43

2.1.4 人臉識別:objectDetection43

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 uptable操作 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 方框濾波(boxFilter) 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::Mat442

A4.2 解構函式Mat::~Mat444

A4.3 Mat類成員函式 444

主要參考文獻 447

五、致謝

首先需要感謝我的導師南京航空航天大學的冷雪飛教授的知遇之恩,她也親自參與撰寫了本書的部分章節。在攻讀碩士學位階段,如果沒有導師的諄諄教誨,我不會和OpenCV相遇,也就不會有此書的出版。

感謝我的同門師兄王碧輝與吳鬆森參與撰寫本書的部分章節,為本書的完善做出的卓越貢獻。

感謝OpenCV開發團隊為世界研發出如此強大且穩定、易用的計算機開源視覺庫,並持續不斷地對其進行維護與更新。

感謝父母將我養育成人,感謝家人們的噓寒問暖,你們是我最堅強的後盾。

感謝母校南京航空航天大學賜予我一顆不甘平庸、上下求索的心。

感謝南京航空航天大學的戴泉晨老師對本書出版所做出的幫助與支援。

感謝國家自然科學基金青年科學基金專案“新型單定子二自由度超聲電機及其驅動的智慧雲臺系統的關鍵技術研究”(專案批准號:51205193)對本書理論研究方面提供的經費支援。

感謝電子工業出版社博文視點事業部的陳曉猛和丁一瓊編輯對本書的出版所作出的大量的工作。他們對出版物的專業和嚴謹的態度讓我留下了深刻的印象。

最後,需要感謝我部落格上的眾多讀者們,是你們對這本書的期待和熱情的留言讓我有了完成這本書的動力和勇氣。

六、書本配套示例程式下載

本書的示例程式最初都在OpenCV 2.4.9(2014年4月15日面世)版本下開發,書稿初版也是基於OpenCV2.4.9而寫。在書稿寫作和修訂過程中,恰逢OpenCV3.0 Alpha(2014年8月21日)和OpenCV3 Beta(2014年11月11日)的釋出,所以本書在審校和修訂過程中(2014年12月1日),決定站在浪潮之巔,以OpenCV3為主,加入OpenCV3的諸多特性,讓這本書可以同時勝任OpenCV2和OpenCV3兩個版本教材的角色。這也是為什麼本書會有OpenCV2和OpenCV3兩個獨立版本的示例程式的原因。

100多個、兩個版本、詳細註釋的示例程式原始碼是本書的靈魂,現將示例程式的相關情況概括如下:

  • 本書包含OpenCV2版的95個書本主線示例程式原始碼、21個附贈示例程式原始碼,OpenCV3版的95個書本主線示例程式原始碼。
  • OpenCV2、OpenCV3兩版程式碼提供分開下載。
  • OpenCV2版的示例程式在Windows7 64位旗艦版、Visual Stuido 2010 、OpenCV 2.4.9的環境下開發與測試,理論上支援OpenCV 2系列的所有版本的編譯執行。
  • OpenCV3版的示例程式在Windows7 64位旗艦版、Visual Stuido 2010 、OpenCV3.0 beta的環境下開發與測試,理論上支援目前已經發布的OpenCV3全版本。
  • 程式原始碼都經過詳細而有條理的註釋。
  • 額外提供可以獨立執行的exe供快速檢視程式效果,方便檢視和檢索。

 

配套示例程式碼下載請點這裡:

 PS:建議下載Github版,因為包括程式序號6、34、84在內的不少程式碼都在Gihub上有過修訂,而百度雲這邊是原始版本。

七、關於勘誤

由於淺墨的水平有限,這本書即便經過了多次的校對,也難免會有疏漏之處。希望書本前的你,能夠熱心地指出書本中錯誤,評論在這篇部落格的下方。大家的評論中提出的書本中的疏漏,淺墨都會仔細地核對和修正。以便在這本書下一版印刷的時候,能以一個更完美更嚴謹的樣子,呈現在大家的面前。

1)勘誤事記

2015年3月,本書進行了第一次勘誤。

2015年6月,本書進行了第二次勘誤,第二次重印。

2015年9月進行了第三次勘誤,第N次重印。

2015年11月4日完成了本書的第四次勘誤工作,第N次重印。

2)主要勘誤評論回覆事記

“ 感謝大家的熱心與支援。32樓及以下大家提出的問題,都已在本書第三次修訂&印刷(第二次勘誤)中全部修正。——於2015年6月。”

至此,100樓及以下大家提出的勘誤問題,以及大家在發給淺墨的郵件中提出的勘誤問題,已經全部在這四次勘誤的過程中修正。2015年11月及以後版本的《OpenCV3程式設計入門》一書,已經較為完善。謝謝大家的支援。——於2015年11月4日。

3)勘誤文件下載

最後,願大家在本書的幫助下,都能很好地入門和掌握新版OpenCV。

願本書能為新版OpenCV在國內的普及以及在世界範圍內的發展,獻上綿薄之力。

以上。