OpenCV4應用開發(fā):入門、進階與工程化實踐
定 價:99 元
叢書名:智能系統(tǒng)與技術(shù)叢書
- 作者:賈志剛張振
- 出版時間:2023/11/1
- ISBN:9787111737209
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP391.413
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書包括三大部分,對應著三個層次的OpenCV開發(fā)進階:(1)基礎(chǔ)篇學習OpenCV基礎(chǔ)知識,知道如何簡單使用API函數(shù);(2)進階篇學習OpenCV核心API、達到熟練掌握可以解決常見的計算機視覺問題;(3)高級實戰(zhàn)篇:綜合運用OpenCV開發(fā)知識,解決實際問題。
第 一部分針對初級讀者,介紹什么是OpenCV、如何開始寫第 一行OpenCV代碼,圖像如何被OpenCV加載與顯示、OpenCV基礎(chǔ)API操作、Mat對象與像素操作。
第二部分針對中級讀者,從圖像卷積開始,認真學習OpenCV圖像處理、特征提取、機器學習等核心模塊相關(guān)知識點、穿插大量工程案例與代碼實踐、從圖像卷積濾波到二值圖像分析、圖像特征提取、自定義對象檢測、完整系統(tǒng)化的學習OpenCV傳統(tǒng)圖像處理的經(jīng)典知識點與案例。真正做到扎實基礎(chǔ)、構(gòu)建中級水準,可以解決常見計算機視覺問題。
第三部分針對高級讀者,這是本書的重點與難點,主要涉及深度神經(jīng)網(wǎng)絡(luò)運用、DNN中支持卷積神經(jīng)網(wǎng)絡(luò)模型理解與調(diào)用、人臉檢測與識別、自定義對象檢測、深度神經(jīng)網(wǎng)絡(luò)模型壓縮與優(yōu)化、模型轉(zhuǎn)換與加速推理、tensorflow對象檢測框架與OpenCV DNN模塊結(jié)合使用等相關(guān)知識點、同時還有OpenCV傳統(tǒng)強項應用二值圖像分析相關(guān)的典型工業(yè)應用案例學習。
通過對本書的學習,讀者對OpenCV整個框架理解、相關(guān)模塊的運用能力都達到一個新的高度、有能力設(shè)計復雜的計算機視覺算法、通過OpenCV解決實際問題、把深度學習模型應用到端側(cè)加速實現(xiàn)商業(yè)價值、拓展OpenCV與計算機視覺在各個行業(yè)的商業(yè)化落地。
(1)工業(yè)界和學術(shù)界專家聯(lián)袂推薦,一線開發(fā)專家與金牌講師撰寫,一站式解決OpenCV工程化開發(fā)痛點。(2)以工業(yè)級視覺應用開發(fā)所需知識點為主線,講透OpenCV相關(guān)核心模塊,案例化詳解1000個常用函數(shù)以及模型的推理與加速,打通OpenCV視覺開發(fā)完整路徑。
前 言
為什么要寫這本書
當前,人工智能熱潮席卷學術(shù)界與工業(yè)界,人工智能已經(jīng)成為時下熱門的詞匯。人工智能領(lǐng)域有兩個最引人注目的技術(shù)—計算機視覺(CV)與自然語言處理(NLP)。其中,計算機視覺應用范圍廣泛,應用場景眾多,市場迫切需要不同層次的計算機視覺專業(yè)人才。
作為當下主流的計算機視覺開發(fā)工具與平臺之一,OpenCV從測試版本發(fā)布至今已有20余年,得到業(yè)界知名公司與廣大開發(fā)者的認可。當前OpenCV已經(jīng)集成了2000多個計算機視覺相關(guān)算法,支持深度學習模型的部署、推理。
我對圖像處理的興趣始于大學做畢業(yè)設(shè)計時。工作了一段時間之后,一個偶然的機會讓我重拾對圖像處理的興趣。于是從2011年開始,我把大量的業(yè)余時間都投入到該技術(shù)領(lǐng)域,并且接觸到了OpenCV開發(fā)框架。使用OpenCV框架幫助我節(jié)省了很多時間,加快了項目交付速度。后來我在博客與個人微信公眾號“OpenCV學堂”上發(fā)表了大量OpenCV開發(fā)相關(guān)的文章,得到了很多讀者的反饋、支持與鼓勵。通過撰寫這些文章,我對如何更好地使用OpenCV進行實際項目開發(fā)有了更多思考,也對技術(shù)背后的知識有了更深理解與認知。
OpenCV4發(fā)布于2018年,現(xiàn)已成為OpenCV框架的主流版本之一。相比之前的版本,OpenCV4的大量函數(shù)接口都符合并支持C++11標準,學習起來就像學習其他面向?qū)ο缶幊陶Z言一樣容易。此外,OpenCV4支持多種加速機制,可以實時加速傳統(tǒng)算法及深度學習模型。OpenCV4在性能、穩(wěn)定性、易用性上完全超越了之前的各個版本。
國內(nèi)已經(jīng)出版了很多OpenCV的書籍,但是我覺得還沒有一本書能夠完整涵蓋OpenCV4開發(fā)的技術(shù)路徑。所以,我認為我有責任把自己多年的OpenCV項目開發(fā)經(jīng)驗通過本書毫無保留地呈現(xiàn)給廣大讀者。希望這本書能幫助初學者掌握基于OpenCV框架進行開發(fā)的技術(shù),進而投身到人工智能的技術(shù)浪潮中去。
讀者對象
本書適合以下讀者閱讀:
計算機視覺領(lǐng)域的從業(yè)者。
OpenCV的愛好者。
高等院校相關(guān)專業(yè)的師生。
C++/Python開發(fā)者。
如何閱讀本書
本書共16章,分為3篇,由淺入深地講解OpenCV的技術(shù)及應用。
基礎(chǔ)篇(第1~4章)主要介紹了OpenCV4框架中基礎(chǔ)模塊相關(guān)的圖像知識、函數(shù)及應用。
進階篇(第5~12章)深入介紹了OpenCV4核心模塊的功能與應用場景,主要包括圖像卷積、二值分析、形態(tài)學分析、特征提取、視頻分析、機器學習模塊等,其中穿插大量實踐案例。
高級與實戰(zhàn)篇(第13~16章)全面介紹了OpenCV4支持的各種性能加速技術(shù)與深度學習模型推理技術(shù),從項目實現(xiàn)出發(fā),講解了對象檢測、缺陷檢測、深度學習模型加速等高級應用層面的OpenCV開發(fā)技術(shù)。
其中,第14章的大部分內(nèi)容由我的好友與合作者張振撰寫。特別感謝他在我需要幫助時,給予我大力支持并提供高質(zhì)量圖書內(nèi)容。
如果你是一個初學者,我建議你從第1章開始依序閱讀本書;如果你已經(jīng)接觸過OpenCV,已有一定的基礎(chǔ),可以從進階篇開始閱讀;如果你使用過OpenCV并有一定的開發(fā)經(jīng)驗,可以根據(jù)需要進行閱讀。
源碼是本書內(nèi)容的一部分,希望讀者在閱讀本書的同時,通過代碼實踐加深對書中內(nèi)容的理解與認知,正所謂“紙上得來終覺淺,絕知此事要躬行”。
勘誤和支持
由于我的水平有限,書中難免會出現(xiàn)一些錯誤或者不準確的地方,懇請讀者批評指正。我已經(jīng)把本書配套源碼上傳到碼云上,訪問地址為https://gitee.com/opencv_ai/book-opencv4-
practice。如果有讀者想直接提交勘誤之后的代碼,請先通過我的郵箱congcong009@gmail.com聯(lián)系我,經(jīng)同意后即可提交。同時,我也會根據(jù)讀者反饋修改、更新源碼,所以建議讀者在閱讀本書之前先從碼云上獲取最新的配套源碼。
如果讀者有更多的寶貴意見,也歡迎發(fā)送郵件給我,期待讀者的真摯反饋。
致謝
感謝“OpenCV學堂”微信公眾號上一直支持我的各位讀者朋友,感謝你們直言不諱地指出了我文章中的很多不妥之處與需要改進的地方,感謝你們的寶貴建議。感謝OpenVINO中文社區(qū)的堵葛亮為第15章提供技術(shù)支持與建議。
謹以此書獻給眾多熱愛OpenCV的朋友們,希望你們未來可以創(chuàng)造更大的社會價值。
賈志剛
賈志剛
OpenVINO中文社區(qū)創(chuàng)始成員、英特爾物聯(lián)網(wǎng)創(chuàng)新大使、華為晟騰HAE、51CTO學院金牌講師。在機器視覺缺陷檢測、生物醫(yī)學細胞分類與檢測識別、安防監(jiān)控視頻內(nèi)容分析與提取、人工智能軟件開發(fā)、深度學習框架集成開發(fā)等方面有深入研究,開發(fā)過多個圖像處理算法模塊并成功應用在醫(yī)學檢測與工業(yè)檢測領(lǐng)域。開設(shè)有公眾號“OpenCV學堂”,并著有《Java數(shù)字圖像處理:編程技巧與應用實踐》《OpenCV Android開發(fā)實戰(zhàn)》等書。
張 振
上海赫立蘇州研究院(赫芯科技)院長,具備豐富的機器視覺檢測一線研發(fā)、管理與運營經(jīng)驗。深耕半導體/SMT缺陷檢測領(lǐng)域10余年,擁有自主知識產(chǎn)權(quán)的軟件和相關(guān)專利數(shù)十項。多年成功創(chuàng)業(yè)經(jīng)歷,積累了豐富的研發(fā)創(chuàng)新和團隊管理經(jīng)驗,并參與市場與客戶需求分析、技術(shù)分析與評估、方案制訂、算法迭代、驗收指標制定、標準機型量產(chǎn)的全流程管理與實踐。
目 錄
前言
基礎(chǔ)篇
第1章 OpenCV簡介與安裝 / 2
1.1 OpenCV簡介 / 2
1.1.1 OpenCV歷史 / 2
1.1.2 OpenCV的模塊與功能 / 3
1.1.3 OpenCV4里程碑 / 4
1.1.4 OpenCV發(fā)展現(xiàn)狀與
應用趨勢 / 4
1.2 OpenCV源碼項目 / 4
1.3 OpenCV4開發(fā)環(huán)境搭建 / 5
1.4 第一個OpenCV開發(fā)程序 / 6
1.5 圖像加載與保存 / 7
1.5.1 加載圖像 / 7
1.5.2 保存圖像 / 8
1.6 加載視頻 / 9
1.7 小結(jié) / 12
第2章 Mat與像素操作 / 13
2.1 Mat對象 / 13
2.1.1 什么是Mat對象 / 13
2.1.2 一切圖像皆Mat / 14
2.1.3 Mat類型與深度 / 15
2.1.4 創(chuàng)建Mat / 15
2.2 訪問像素 / 18
2.2.1 遍歷Mat中的像素 / 18
2.2.2 像素算術(shù)運算 / 20
2.2.3 位運算 / 21
2.2.4 調(diào)整圖像亮度與對比度 / 22
2.3 圖像類型與通道 / 23
2.3.1 圖像類型 / 23
2.3.2 圖像通道 / 23
2.3.3 通道操作 / 24
2.4 小結(jié) / 25
第3章 色彩空間 / 26
3.1 RGB色彩空間 / 26
3.2 HSV色彩空間 / 28
3.3 LAB色彩空間 / 29
3.4 色彩空間的轉(zhuǎn)換與應用 / 30
3.5 小結(jié) / 31
第4章 圖像直方圖 / 32
4.1 像素統(tǒng)計信息 / 32
4.2 直方圖的計算與繪制 / 34
4.2.1 直方圖計算 / 35
4.2.2 直方圖繪制 / 36
4.3 直方圖均衡化 / 37
4.4 直方圖比較 / 40
4.5 直方圖反向投影 / 41
4.6 小結(jié) / 43
進階篇
第5章 卷積操作 / 46
5.1 卷積的概念 / 46
5.2 卷積模糊 / 49
5.3 自定義濾波 / 53
5.4 梯度提取 / 56
5.5 邊緣發(fā)現(xiàn) / 59
5.6 噪聲與去噪 / 61
5.7 邊緣保留濾波 / 64
5.8 銳化增強 / 66
5.9 小結(jié) / 68
第6章 二值圖像 / 70
6.1 圖像閾值化分割 / 70
6.2 全局閾值計算 / 72
6.3 自適應閾值計算 / 76
6.4 去噪與二值化 / 77
6.4.1 去噪對二值化的影響 / 77
6.4.2 其他方式的二值化 / 78
6.5 小結(jié) / 79
第7章 二值分析 / 80
7.1 二值圖像分析概述 / 80
7.2 連通組件標記 / 82
7.3 輪廓發(fā)現(xiàn) / 85
7.3.1 輪廓發(fā)現(xiàn)函數(shù) / 85
7.3.2 輪廓繪制函數(shù) / 87
7.3.3 輪廓發(fā)現(xiàn)與繪制的示例
代碼 / 87
7.4 輪廓測量 / 88
7.5 擬合與逼近 / 90
7.6 輪廓分析 / 95
7.7 直線檢測 / 97
7.8 霍夫圓檢測 / 99
7.9 最大內(nèi)接圓與最小外接圓 / 101
7.10 輪廓匹配 / 102
7.11 最大輪廓與關(guān)鍵點編碼 / 104
7.12 凸包檢測 / 106
7.13 小結(jié) / 107
第8章 形態(tài)學分析 / 108
8.1 圖像形態(tài)學概述 / 108
8.2 膨脹與腐蝕 / 109
8.3 開/閉操作 / 111
8.4 形態(tài)學梯度 / 113
8.5 頂帽與黑帽 / 115
8.6 擊中/擊不中 / 116
8.7 結(jié)構(gòu)元素 / 119
8.8 距離變換 / 120
8.9 分水嶺分割 / 121
8.10 小結(jié) / 124
第9章 特征提取 / 125
9.1 圖像金字塔 / 125
9.1.1 高斯金字塔 / 125
9.1.2 拉普拉斯金字塔 / 128
9.1.3 圖像金字塔融合 / 129
9.2 Harris角點檢測 / 131
9.3 shi-tomas角點檢測 / 133
9.4 亞像素級別的角點檢測 / 135
9.5 HOG特征與使用 / 137
9.5.1 HOG特征描述子 / 137
9.5.2 HOG特征行人檢測 / 139
9.6 ORB特征描述子 / 140
9.6.1 關(guān)鍵點與描述子提取 / 140
9.6.2 描述子匹配 / 144
9.7 基于特征的對象檢測 / 148
9.7.1 單應性矩陣計算方法 / 148
9.7.2 特征對象的位置發(fā)現(xiàn) / 150
9.8 小結(jié) / 152
第10章 視頻分析 / 153
10.1 基于顏色的對象跟蹤 / 153
10.2 視頻背景分析 / 155
10.3 幀差法背景分析 / 157
10.4 稀疏光流分析法 / 158
10.5 稠密光流分析法 / 161
10.6 均值遷移分析 / 163
10.7 小結(jié) / 166
第11章 機器學習 / 167
11.1 KMeans分類 / 167
11.1.1 KMeans圖像語義
分割 / 167
11.1.2 提取主色彩構(gòu)建色卡 / 170
11.2 KNN分類 / 172
11.2.1 KNN函數(shù)支持 / 172
11.2.2 KNN實現(xiàn)手寫數(shù)字
識別 / 173
11.3 SVM分類 / 175
11.3.1 SVM的原理與分類 / 175
11.3.2 SVM函數(shù) / 176
11.3.3 SVM實現(xiàn)手寫數(shù)字
識別 / 176
11.4 SVM與HOG實現(xiàn)對象檢測 / 177
11.4.1 數(shù)據(jù)樣本特征提取 / 178
11.4.2 SVM特征分類 / 179
11.4.3 構(gòu)建SVM對象檢測器 / 179
11.5 小結(jié) / 181
第12章 深度神經(jīng)網(wǎng)絡(luò) / 182
12.1 DNN概述 / 182
12.2 圖像分類 / 183
12.3 對象檢測 / 186
12.3.1 SSD對象檢測 / 187
12.3.2 Faster-RCNN對象
檢測 / 188
12.3.3 YOLO對象檢測 / 190
12.4 ENet圖像語義分割 / 193
12.5 風格遷移 / 195
12.6 場景文字檢測 / 197
12.7 人臉檢測 / 199
12.8 小結(jié) / 201
高級與實戰(zhàn)篇
第13章 YOLO 5自定義對象
檢測 / 204
13.1 YOLO 5對象檢測框架 / 204
13.2 YOLO 5