OpenCV 3是一種*先進(jìn)的計(jì)算機(jī)視覺庫,它提供了很多圖像和視頻處理操作,以及一些代表計(jì)算機(jī)視覺未來發(fā)展方向的功能,如人臉識別或目標(biāo)跟蹤。學(xué)習(xí)計(jì)算機(jī)視覺算法、模型和OpenCV API的基本概念之后,可以開發(fā)各種現(xiàn)實(shí)生活中的應(yīng)用程序(如安全和監(jiān)控方面的應(yīng)用程序)。
本書從圖像處理的基本操作出發(fā),帶你開啟先進(jìn)計(jì)算機(jī)視覺的探索之旅。計(jì)算機(jī)視覺是一個快速發(fā)展的學(xué)科,與其相關(guān)的現(xiàn)實(shí)應(yīng)用也呈爆炸性增長,本書的目的就是幫助計(jì)算機(jī)視覺領(lǐng)域的新手和想要了解全新的OpenCV 3.0.0的計(jì)算機(jī)視覺專家快速掌握基于Python的OpenCV計(jì)算機(jī)視覺開發(fā)的實(shí)用方法、技巧和*佳實(shí)踐。
通過閱讀本書,你將學(xué)到:
安裝和熟練使用基于Python的OpenCV 3的API
掌握圖像處理和視頻分析的基礎(chǔ)知識
在圖像和視頻中檢測和識別目標(biāo)
使用OpenCV檢測和識別人臉
訓(xùn)練和使用自己的對象分類器
了解計(jì)算機(jī)視覺中的機(jī)器學(xué)習(xí)概念
使用OpenCV的人工神經(jīng)網(wǎng)絡(luò)來解決實(shí)際問題
開發(fā)現(xiàn)實(shí)生活中的計(jì)算機(jī)視覺應(yīng)用
Preface 前 言O(shè)penCV 3是一種先進(jìn)的計(jì)算機(jī)視覺庫,可以用于各種圖像和視頻處理操作,通過OpenCV 3 能很容易地實(shí)現(xiàn)一些有前景且功能先進(jìn)的應(yīng)用(比如:人臉識別或目標(biāo)跟蹤等)。理解與計(jì)算機(jī)視覺相關(guān)的算法、模型以及OpenCV 3 API背后的基本概念,有助于開發(fā)現(xiàn)實(shí)世界中的各種應(yīng)用程序(比如:安全和監(jiān)視領(lǐng)域的工具)。
本書將從圖像處理的基本操作出發(fā),帶你開啟先進(jìn)計(jì)算機(jī)視覺概念的探索之旅。計(jì)算機(jī)視覺是一個快速發(fā)展的學(xué)科,在現(xiàn)實(shí)生活中,它的應(yīng)用增長得非?,因此寫作本書的目的是為了幫助計(jì)算機(jī)視覺領(lǐng)域的新手和想要了解全新的OpenCV 3.0.0的計(jì)算機(jī)視覺專家。
本書的主要內(nèi)容第1章介紹如何在不同平臺下安裝基于Python的OpenCV,并給出一些常見問題的解決方法。
第2章介紹了OpenCV的I/O功能,并討論與項(xiàng)目相關(guān)的概念,以及如何針對該項(xiàng)目進(jìn)行面向?qū)ο笤O(shè)計(jì)。
第3章介紹一些圖像變換方法,例如在圖像中檢測膚色、銳化圖像、標(biāo)記主體輪廓,以及使用線段檢測器檢測人行橫道等。
第4章介紹如何利用深度攝像頭的數(shù)據(jù)來識別前景和背景區(qū)域,這樣就可以限制針對前景或背景的效果。
第5章介紹一些OpenCV的人臉檢測功能和相關(guān)的數(shù)據(jù)文件,這些文件定義了跟蹤目標(biāo)的特定類型。
第6章介紹如何用OpenCV來檢測圖像特征,并利用這些特征來匹配和搜索圖像。
第7章介紹目標(biāo)檢測和目標(biāo)識別的概念,這是計(jì)算機(jī)視覺中最常見的問題之一。
第8章對目標(biāo)跟蹤進(jìn)行深入探討,目標(biāo)跟蹤是對攝像機(jī)中的圖像或視頻中移動的物體進(jìn)行定位的過程。
第9章介紹基于OpenCV的人工神經(jīng)網(wǎng)絡(luò),并介紹其在現(xiàn)實(shí)生活中的應(yīng)用。
閱讀前的準(zhǔn)備工作本書第1章會指導(dǎo)讀者安裝所有必要軟件,你只需準(zhǔn)備一臺較新的計(jì)算機(jī)。另外,強(qiáng)烈推薦為計(jì)算機(jī)安裝攝像頭,但這并不是必備的。
本書的讀者對象本書針對具有一定Python工作經(jīng)驗(yàn)的程序員以及想要利用OpenCV庫研究計(jì)算機(jī)視覺課題的讀者。本書不要求讀者具有計(jì)算機(jī)視覺或OpenCV經(jīng)驗(yàn),但要具有編程經(jīng)驗(yàn)。
本書體例本書有很多用來區(qū)分不同信息的文本格式,下面給出一些這類格式的樣例,并解釋它們的含義。
代碼塊的格式如下:
為了提醒讀者注意代碼塊中的特殊部分,會將相關(guān)行或相關(guān)項(xiàng)設(shè)置為粗體:
命令行的輸入或輸出的格式為:
注意:警告或重要注釋以這樣的形式出現(xiàn)。
提示:提示和技巧以這樣的形式出現(xiàn)。
下載示例代碼讀者可登錄華章網(wǎng)站(www.hzbook.com)本書頁面,下載本書示例代碼。
作者簡介 Abut the AuthorsJoe Minichino 是Hoolux Medical從事計(jì)算機(jī)視覺的工程師,他利用業(yè)余時間開發(fā)了NoSQL數(shù)據(jù)庫LokiJS。他也是重金屬歌手/作曲家。他是一個充滿激情的程序員,對編程語言和技術(shù)非常好奇,并一直在使用它們。在Hoolux,Joe領(lǐng)導(dǎo)了針對醫(yī)療行業(yè)的Android計(jì)算機(jī)視覺廣告平臺的開發(fā)。
他出生在意大利瓦雷澤市的Lombardy,并在那里長大,在米蘭Universitá Statale受過哲學(xué)教育,最近11年Joe在愛爾蘭的Cork度過,在這里他成為Cork技術(shù)研究所的一名計(jì)算機(jī)科學(xué)研究生。
我非常感謝我的合作伙伴Rowena,她總是鼓勵我,也感謝兩個小女兒給我靈感。非常感謝這本書的合作者和編輯,尤其是Joe Howse、Adrian Roesbrock、Brandon Castellano、OpenCV社區(qū),以及Packt出版社中那些為本書付出勞動的人。
Joseph Howse 生活在加拿大。在冬天,他留著胡子,而他的四只貓留著厚皮毛。他喜歡每天給貓梳毛。有時貓還會抓他的胡子。
自2012年以來,他一直在為Packt出版社寫作,他的著作包括《OpenCV for Secret Agents》《OpenCV Blueprints》《Android Application Programming with OpenCV 3》《OpenCV Computer Vision with Python》以及《Python Game Programming by Example》。
當(dāng)他不寫書或打理萌寵時,他會提供咨詢和培訓(xùn),并通過他的公司(Nummist Media公司(http://nummist.com))進(jìn)行軟件開發(fā)服務(wù)。
Abut the Reviewers 審校者簡介Nandan Banerjee 擁有計(jì)算機(jī)科學(xué)學(xué)士學(xué)位和機(jī)器人工程碩士學(xué)位。他畢業(yè)后在三星電子工作。他在班加羅爾的研發(fā)中心工作了一年。為了參加DARPA機(jī)器人挑戰(zhàn),他還曾在位于Atlas的Boston Dynamics機(jī)器人公司的WPI-CMU團(tuán)隊(duì)工作過。目前他是iRobot公司的一名機(jī)器人軟件工程師。他是一名嵌入式系統(tǒng)和機(jī)器人愛好者,主要喜歡計(jì)算機(jī)視覺和運(yùn)動規(guī)劃。他熟悉各種語言,包括C、C++、Python、Java和Delphi。他在工作中會用到ROS、OpenRAVE、OpenCV、PCL、OpenGL、CUDA和Android SDK。
我要感謝作者和出版商能出版這樣精彩的書。
Tian Cao 在美國教堂山的北卡羅來納州大學(xué)攻讀計(jì)算機(jī)科學(xué)博士學(xué)位,并參與圖像分析、計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)等項(xiàng)目。
我將這項(xiàng)工作獻(xiàn)給我的父母和女友。
Brandon Castellano 來自加拿大的學(xué)生,在加拿大倫敦市西安大略大學(xué)攻讀電氣工程碩士學(xué)位。在2012年,他獲得同專業(yè)的學(xué)士學(xué)位。他主要研究實(shí)時圖像處理算法的并行處理實(shí)現(xiàn)和GPGPU/FPGA優(yōu)化。Brandon也在Eagle Vision Systems公司工作過,他在這家公司主要專注于機(jī)器人應(yīng)用中的實(shí)時圖像處理。
雖然他使用OpenCV和C++超過5年了,但他在研究中一直提倡使用Python,因?yàn)镻ython開發(fā)速度快,可與復(fù)雜系統(tǒng)實(shí)現(xiàn)低級對接。他在GitHub上有開源項(xiàng)目,例如,PySceneDetect,這些項(xiàng)目大部分是用Python編寫的。除了圖像/視頻處理,他還致力于實(shí)現(xiàn)三維展示,并提供軟件工具來支持這樣的開發(fā)。
他除了在他的網(wǎng)站(http://www.bcastell.com)上張貼技術(shù)文章和教程外,還參與各種開源和不開源的項(xiàng)目,他在GitHub上的用戶名為Breakthrough(http://www.github.com/Breakthrough)。他是Super User和Stack Overflow社區(qū)的活躍成員(其名字仍是Breakthrough),可直接通過他的網(wǎng)站與他聯(lián)系。
我要感謝過去幾年所有的朋友和家人的耐心(尤其是我的父母Peter和Lori以及我的兄弟Mitchell),沒有他們持續(xù)的愛和支持,我不可能取得這一切成就。
我還要特別感謝所有致力開源軟件庫的開發(fā)者,特別是OpenCV,這有助于將前沿的軟件技術(shù)免費(fèi)帶給世界各地的軟件開發(fā)者。也想感謝那些寫文檔、提交錯誤報告和寫教程/書籍(尤其是這本書的作者。┑娜藗,你們的貢獻(xiàn)對任何開源項(xiàng)目的成功至關(guān)重要,尤指像OpenCV這樣復(fù)雜龐大的開源軟件。
Haojian Jin 位于加拿大Sunnyvale雅虎實(shí)驗(yàn)室的軟件工程師/研究員。他主要開發(fā)移動新設(shè)備上(或最少硬件更改)的新系統(tǒng)。為了創(chuàng)建當(dāng)今不存在的事物,他花費(fèi)了大量時間來研究信號處理、計(jì)算機(jī)視覺、機(jī)器學(xué)習(xí)和自然語言處理,并以有趣的方式來使用它們?稍趆ttp://shift-3.com/上找到更多關(guān)于他的信息。
Adrian Rosebrock 一位作家,也是http://www.pyimagesearch.com/的博主。他有馬里蘭大學(xué)計(jì)算機(jī)科學(xué)博士學(xué)位,側(cè)重于計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)的研究。
他曾在癌癥研究所從事通過乳腺圖像來自動預(yù)測乳腺癌的危險因素的研究。他還寫了《Practical Python and OpenCV》一書(http://pyimg.co/x7ed5),這本書介紹如何利用Python和OpenCV來構(gòu)建現(xiàn)實(shí)世界中的計(jì)算機(jī)視覺應(yīng)用。
About the Translators 譯者簡介劉波 博士,重慶工商大學(xué)計(jì)算機(jī)科學(xué)與信息工程學(xué)院教師,主要從事機(jī)器學(xué)習(xí)理論、計(jì)算機(jī)視覺和最優(yōu)化技術(shù)研究,同時對Hadoop和Spark平臺上的大數(shù)據(jù)分析感興趣,也對Linux編程和Oracle數(shù)據(jù)庫感興趣。
苗貝貝 碩士,北京工商大學(xué)計(jì)算機(jī)與信息工程學(xué)院研究生,主要從事機(jī)器學(xué)習(xí)理論、時間序列動力學(xué)特征分析及應(yīng)用的研究,對基于Python的計(jì)算機(jī)視覺分析有濃厚的興趣。
史斌 2015年本科畢業(yè)于電子科技大學(xué)計(jì)算機(jī)學(xué)院,目前就職于成都知數(shù)科技有限公司,主要從事數(shù)據(jù)爬取、數(shù)據(jù)處理、平臺運(yùn)維等工作,熟悉Python、Linux shell,同時熱愛計(jì)算機(jī)視覺編程,熟悉Python下的OpenCV編程。
目 錄 Contents
譯者序
前言
作者簡介
審校者簡介
譯者簡介
第1章 安裝OpenCV 1
1.1 選擇和使用合適的安裝工具 2
1.1.1 在Windows上安裝 2
1.1.2 在OS X系統(tǒng)中安裝 6
1.1.3 在Ubuntu及其衍生版本中安裝 11
1.1.4 在其他類Unix系統(tǒng)中安裝 12
1.2 安裝Contrib模塊 13
1.3 運(yùn)行示例 13
1.4 查找文檔、幫助及更新 14
1.5 總結(jié) 15
第2章 處理文件、攝像頭和圖形用戶界面 16
2.1 基本I/O腳本 16
2.1.1 讀/寫圖像文件 16
2.1.2 圖像與原始字節(jié)之間的轉(zhuǎn)換 19
2.1.3 使用numpy.array訪問圖像數(shù)據(jù) 20
2.1.4 視頻文件的讀/寫 22
2.1.5 捕獲攝像頭的幀 23
2.1.6 在窗口顯示圖像 24
2.1.7 在窗口顯示攝像頭幀 25
2.2 Cameo項(xiàng)目(人臉跟蹤和圖像處理) 26
2.3 Cameo—面向?qū)ο蟮脑O(shè)計(jì) 27
2.3.1 使用managers. CaptureManager提取視頻流 27
2.3.2 使用managers.WindowManager抽象窗口和鍵盤 32
2.3.3 cameo.Cameo的強(qiáng)大實(shí)現(xiàn) 33
2.4 總結(jié) 34
第3章 使用OpenCV 3處理圖像 36
3.1 不同色彩空間的轉(zhuǎn)換 36
3.2 傅里葉變換 37
3.2.1 高通濾波器 37
3.2.2 低通濾波器 39
3.3 創(chuàng)建模塊 39
3.4 邊緣檢測 40
3.5 用定制內(nèi)核做卷積 41
3.6 修改應(yīng)用 43
3.7 Canny邊緣檢測 44
3.8 輪廓檢測 45
3.9 邊界框、最小矩形區(qū)域和最小閉圓的輪廓 46
3.10 凸輪廓與Douglas-Peucker算法 48
3.11 直線和圓檢測 50
3.11.1 直線檢測 50
3.11.2 圓檢測 51
3.12 檢測其他形狀 52
3.13 總結(jié) 52
第4章 深度估計(jì)與分割 53
4.1 創(chuàng)建模塊 53
4.2 捕獲深度攝像頭的幀 54
4.3 從視差圖得到掩模 56
4.4 對復(fù)制操作執(zhí)行掩模 57
4.5 使用普通攝像頭進(jìn)行深度估計(jì) 59
4.6 使用分水嶺和GrabCut算法進(jìn)行物體分割 63
4.6.1 用GrabCut進(jìn)行前景檢測的例子 64
4.6.2 使用分水嶺算法進(jìn)行圖像分割 66
4.7 總結(jié) 69
第5章 人臉檢測和識別 70
5.1 Haar級聯(lián)的概念 70
5.2 獲取Haar級聯(lián)數(shù)據(jù) 71
5.3 使用OpenCV進(jìn)行人臉檢測 72
5.3.1 靜態(tài)圖像中的人臉檢測 72
5.3.2 視頻中的人臉檢測 74
5.3.3 人臉識別 76
5.4 總結(jié) 82
第6章 圖像檢索以及基于圖像描述符的搜索 83
6.1 特征檢測算法 83
6.1.1 特征定義 84
6.1.2 使用DoG和SIFT進(jìn)行特征提取與描述 86
6.1.3 使用快速Hessian算法和SURF來提取和檢測特征 89
6.1.4 基于ORB的特征檢測和特征匹配 91
6.1.5 ORB特征匹配 93
6.1.6 K-最近鄰匹配 95
6.1.7 FLANN匹配 96
6.1.8 FLANN的單應(yīng)性匹配 99
6.1.9 基于文身取證的應(yīng)用程序示例 102
6.2 總結(jié) 105
第7章 目標(biāo)檢測與識別 106
7.1 目標(biāo)檢測與識別技術(shù) 106
7.1.1 HOG描述符 107
7.1.2 檢測人 112
7.1.3 創(chuàng)建和訓(xùn)練目標(biāo)檢測器 113
7.2 汽車檢測 116
7.2.1 代碼的功能 118
7.2.2 SVM和滑動窗口 122
7.3 總結(jié) 134
第8章 目標(biāo)跟蹤 135
8.1 檢測移動的目標(biāo) 135
8.2 背景分割器:KNN、MOG2和GMG 138
8.2.1 均值漂移和CAMShift 142
8.2.2 彩色直方圖 144
8.2.3 返回代碼 146
8.3 CAMShift 147
8.4 卡爾曼濾波器 149
8.4.1 預(yù)測和更新 149
8.4.2 范例 150
8.4.3 一個基于行人跟蹤的例子 153
8.4.4 Pedestrian類 154
8.4.5 主程序 157
8.5 總結(jié) 159
第9章 基于OpenCV的神經(jīng)網(wǎng)絡(luò)簡介 160
9.1 人工神經(jīng)網(wǎng)絡(luò) 160
9.2 人工神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu) 161
9.2.1 網(wǎng)絡(luò)層級示例 162
9.2.2 學(xué)習(xí)算法 163
9.3 OpenCV中的ANN 164
9.3.1 基于ANN的動物分類 166
9.3.2 訓(xùn)練周期 169
9.4 用人工神經(jīng)網(wǎng)絡(luò)進(jìn)行手寫數(shù)字識別 170
9.4.1 MNIST—手寫數(shù)字?jǐn)?shù)據(jù)庫 170
9.4.2 定制訓(xùn)練數(shù)據(jù) 170
9.4.3 初始參數(shù) 171
9.4.4 迭代次數(shù) 171
9.4.5 其他參數(shù) 171
9.4.6 迷你庫 172
9.4.7 主文件 175
9.5 可能的改進(jìn)和潛在的應(yīng)用 180
9.5.1 改進(jìn) 180
9.5.2 應(yīng)用 181
9.6 總結(jié) 181