學習OpenCV 4:基于Python的算法實戰( 簡體 字) | |
作者:肖鈴 | 類別:1. -> 教材 -> 數位影像處理 2. -> 程式設計 -> Python |
出版社:電子工業出版社 | 3dWoo書號: 55546 詢問書籍請說出此書號! 有庫存 NT售價: 545 元 |
出版日:12/1/2021 | |
頁數:460 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121424397 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 1 章 OpenCV 快速入門
1.1 OpenCV 介紹 1.1.1 OpenCV 概述 1.1.2 OpenCV 的代碼結構 1.1.3 OpenCV 4 的新特性 1.2 OpenCV 開發環境搭建 1.2.1 案例 1:Windows 動態庫開發環境搭建 1.2.2 案例 2:Linux 動態庫開發環境搭建 1.2.3 案例 3:Python 語言開發環境搭建 1.3 OpenCV 模塊介紹 1.3.1 常用模塊 1.3.2 擴展模塊 1.4 OpenCV 源碼編譯 1.4.1 案例 4:OpenCV 編譯 1.4.2 案例 5:OpenCV 裁剪編譯 1.4.3 案例 6:擴展模塊 opencv-contrib 1.5 進階必備:OpenCV 入門參考 1.5.1 OpenCV 版本選擇 1.5.2 如何學習 OpenCV 第 2 章 圖像讀/寫模塊 imgcodecs 2.1 模塊導讀 2.2 圖像讀/寫操作 2.2.1 案例 7:圖像讀取 2.2.2 案例 8:圖像保存 2.3 圖像編/解碼 2.3.1 案例 9:圖像編碼應用 2.3.2 案例 10:圖像解碼應用 2.4 進階必備:聊聊圖像格式 第 3 章 核心庫模塊 core 3.1 模塊導讀 3.2 基本數據結構 3.2.1 案例 11:Mat 數據結構介紹及 C++調用 3.2.2 案例 12:Python 中的 Mat 對象操作 3.2.3 案例 13:Point 結構 3.2.4 案例 14:Rect 結構 3.2.5 案例 15:Size 結構 3.3 矩陣運算 3.3.1 案例 16:四則運算 3.3.2 案例 17:位運算 3.3.3 案例 18:代數運算 3.3.4 案例 19:比較運算 3.3.5 案例 20:特征值與特征向量 3.3.6 案例 21:生成隨機數矩陣 3.4 矩陣變換 3.4.1 案例 22:矩陣轉向量 3.4.2 案例 23:通道分離與通道合并 3.4.3 案例 24:圖像旋轉 3.4.4 案例 25:圖像拼接 3.4.5 案例 26:圖像邊界拓展 3.4.6 案例 27:傅里葉變換 3.5 進階必備:聊聊圖像像素遍歷與應用 3.5.1 案例 28:圖像像素遍歷 3.5.2 案例 29:提取拍照手寫簽名 第 4 章 圖像處理模塊 imgproc(一) 4.1 模塊導讀 4.2 案例 30:顏色空間變換 4.3 案例 31:圖像尺寸變換 4.4 基本繪制 4.4.1 案例 32:繪制標記 4.4.2 案例 33:繪制直線 4.4.3 案例 34:繪制矩形 4.4.4 案例 35:繪制圓 4.4.5 案例 36:繪制橢圓 4.4.6 案例 37:繪制文字 4.5 形態學運算 4.5.1 案例 38:腐蝕 4.5.2 案例 39:膨脹 4.5.3 案例 40:其他形態學運算 4.6 圖像濾波 4.6.1 案例 41:方框濾波 4.6.2 案例 42:均值濾波 4.6.3 案例 43:高斯濾波 4.6.4 案例 44:雙邊濾波 4.6.5 案例 45:中值濾波 4.7 邊緣檢測 4.7.1 案例 46:Sobel 邊緣檢測 4.7.2 案例 47:Scharr 邊緣檢測 4.7.3 案例 48:Laplacian 邊緣檢測 4.7.4 案例 49:Canny 邊緣檢測 4.8 進階必備:聊聊顏色模型 第 5 章 圖像處理模塊 imgproc(二) 5.1 霍夫變換 5.1.1 案例 50:霍夫線變換 5.1.2 案例 51:霍夫圓變換 5.2 案例 52:仿射變換 5.3 案例 53:透視變換 5.4 案例 54:重映射 5.5 閾值化 5.5.1 案例 55:基本閾值化 5.5.2 案例 56:自適應閾值化 5.6 圖像金字塔 5.6.1 案例 57:高斯金字塔 5.6.2 案例 58:拉普拉斯金字塔 5.7 直方圖 5.7.1 案例 59:直方圖計算 5.7.2 案例 60:直方圖均衡化 5.8 傳統圖像分割 5.8.1 案例 61:分水嶺算法 5.8.2 案例 62:GrabCut 算法 5.8.3 案例 63:漫水填充算法 5.9 角點檢測 5.9.1 案例 64:Harris 角點檢測 5.9.2 案例 65:Shi-Tomasi 角點檢測 5.9.3 案例 66:亞像素角點檢測 5.10 圖像輪廓 5.10.1 案例 67:輪廓查找 5.10.2 案例 68:輪廓繪制 5.11 輪廓包裹 5.11.1 案例 69:矩形邊框 5.11.2 案例 70:最小外接矩形 5.11.3 案例 71:最小外接圓 5.12 案例 72:多邊形填充 5.13 圖像擬合 5.13.1 案例 73:直線擬合 5.13.2 案例 74:橢圓擬合 5.13.3 案例 75:多邊形擬合 5.14 案例 76:凸包檢測 5.15 進階必備:圖像處理算法概述 第 6 章 可視化模塊 highgui 6.1 模塊導讀 6.2 圖像窗口 6.2.1 案例 77:創建與銷毀窗口 6.2.2 案例 78:圖像窗口操作 6.3 圖像操作 6.3.1 案例 79:圖像顯示 6.3.2 案例 80:選取感興趣區域 6.4 案例 81:鍵盤操作 6.5 案例 82:鼠標操作 6.6 案例 83:進度條操作 6.7 進階必備:在 Qt 中使用 OpenCV 第 7 章 視頻處理模塊 videoio 7.1 模塊導讀 7.2 視頻讀取 7.2.1 案例 84:從文件讀取視頻 7.2.2 案例 85:從設備讀取視頻 7.3 視頻保存 7.3.1 案例 86:從圖片文件創建視頻 7.3.2 案例 87:保存相機采集的視頻 7.4 進階必備:視頻編/解碼工具 FFMPEG 第 8 章 視頻分析模塊 video 8.1 運動分析 8.1.1 模塊導讀 8.1.2 案例 88:基于 MOG2 與 KNN 算法的運動分析 8.2 目標跟蹤 8.2.1 模塊導讀 8.2.2 案例 89:基于 CamShift 算法的目標跟蹤 8.2.3 案例 90:基于 meanShift 算法的目標跟蹤 8.2.4 案例 91:稀疏光流法運動目標跟蹤··. 8.2.5 案例 92:稠密光流法運動目標跟蹤 8.3 進階必備:深度學習光流算法 第 9 章 照片處理模塊 photo 9.1 模塊導讀 9.2 案例 93:基于 OpenCV 的無縫克隆 9.3 案例 94:基于 OpenCV 的圖像對比度保留脫色 9.4 案例 95:基于 OpenCV 的圖像修復 9.5 案例 96:基于 OpenCV 的 HDR 成像 9.6 圖像非真實感渲染 9.6.1 案例 97:邊緣保留濾波 9.6.2 案例 98:圖像細節增強 9.6.3 案例 99:鉛筆素描 9.6.4 案例 100:風格化圖像 9.7 進階必備:照片處理算法概述 第 10 章 2D 特征模塊 features2d 10.1 模塊導讀 10.2 特征點檢測 10.2.1 案例 101:SIFT 特征點檢測 10.2.2 案例 102:SURF 特征點檢測 10.2.3 案例 103:BRISK 特征點檢測 10.2.4 案例 104:ORB 特征點檢測 10.2.5 案例 105:KAZE 特征點檢測 10.2.6 案例 106:AKAZE 特征點檢測 10.2.7 案例 107:AGAST 特征點檢測 10.2.8 案例 108:FAST 特征點檢測 10.3 特征點匹配 10.3.1 案例 109:Brute-Force 特征點匹配 10.3.2 案例 110:FLANN 特征點匹配 10.4 進階必備:特征點檢測算法概述 第 11 章 相機標定與三維重建模塊 calib3d 11.1 模塊導讀 11.2 單應性變換 11.2.1 案例 111:單應性變換矩陣 11.2.2 案例 112:單應性應用之圖像插入 11.3 相機標定 11.3.1 案例 113:棋盤角點檢測并繪制 11.3.2 案例 114:消除圖像失真 11.4 進階必備:聊聊鏡頭失真 第 12 章 傳統目標檢測模塊 objdetect 12.1 模塊導讀 12.2 級聯分類器的應用 12.2.1 案例 115:人臉檢測 12.2.2 案例 116:人眼檢測 12.3 案例 117:HOG 描述符行人檢測 12.4 二維碼應用 12.4.1 案例 118:二維碼檢測 12.4.2 案例 119:二維碼解碼 12.5 進階必備:聊聊條形碼與二維碼 第 13 章 機器學習模塊 ml 13.1 模塊導讀 13.2 案例 120:基于 OpenCV 的Logistic回歸 13.3 案例 121:基于 OpenCV 的支持向量機 13.4 案例 122:基于 OpenCV 的主成分分析 13.5 進階必備:機器學習算法概述 第 14 章 深度學習模塊 dnn 14.1 模塊導讀 14.2 風格遷移 14.2.1 深度學習風格遷移 14.2.2 案例 123:OpenCV 實現風格遷移推理 14.3 圖像分類 14.3.1 深度學習圖像分類 14.3.2 案例 124:基于 TensorFlow 訓練 Fashion-MNIST 算法模型 14.3.3 案例 125:OpenCV 實現圖像分類推理 14.4 目標檢測 14.4.1 深度學習目標檢測 14.4.2 案例 126:OpenCV 實現目標檢測推理 14.5 圖像超分 14.5.1 深度學習圖像超分算法 14.5.2 案例 127:OpenCV 實現圖像超分推理 14.6 進階必備:OpenCV 與計算機視覺 14.6.1 計算機視覺的發展 14.6.2 OpenCV 在計算機視覺中的應用 本書是一本通過OpenCV 4來講解算法的入門書。全書共分為4個部分,第一部分包括第1~3章,主要有OpenCVr入門知識、OpenCV 的圖像讀寫模塊和和辛苦core模塊講解;第二部分包括第4~7章,主要有頭像處理imgproc模塊、視頻處理videoio模塊和可視化highgui模塊、視頻分析video模塊講解;第三部分包括第8~10章,主要有2d特征框架feature2d模塊、照片處理photo模塊、目標檢測objdetect模塊講解;第四部分包括第11~12章,包括有深度神經網絡dnn模塊和機器學習ml模塊等眾多內容講解。
北宋大家張載的“橫渠四句”非常有名,“為天地立心,為生民立命,為往圣繼絕學,為萬世開太平”,歷史上很多名人以之作為安身立命追求事業的勉勵語。第一次讀這句名言時,我非常激動,現在也時常想起,雖無法實現卻也心向往之。
有幸與電子工業出版社再次合作,個人能力淺薄,不敢妄談“為往圣繼絕學”,但也希望自己的書有一些實用價值,能在技術傳播中貢獻一份綿薄之力。在寫作前,劉偉老師(本書編輯)和我反復推敲寫作的目的是什么,這本書與別的圖書有什么不同,能給讀者帶來什么幫助等命題。我們圍繞上述命題提出了如下 4 個問題:為什么要學習圖像處理?為什么要選用 OpenCV?為什么要用OpenCV 4?這本書與別的圖書有什么不同? 下面就通過對這 4 個問題的回答來介紹一下本書,讓讀者能夠對本書的寫作目的、寫作思路,以及如何參考本書進行 OpenCV 的學習有一個初步的理解。 為什么要學習圖像處理? 圖像處理之所以重要,是因為人類對認知世界的需要。 我們都知道,當前智能手機的普及率非常高,當看到美景或有事情發生時,幾乎所有人都會拿起手機拍照或錄制視頻,并將它們分享在各大平臺。愛美之心,人皆有之,因此,相機軟件也集成了越來越多的功能,如美顏、濾鏡等,其中很多功能都是在照片采集后通過圖像處理技術實現的。 各大手機廠商不遺余力地升級拍照或攝像功能,為了讓用戶能存儲更多的照片和視頻而不斷提升手機的存儲空間,這些都證明了用戶對圖像和視頻的需求非常強烈,從側面也反映了圖像處理技術的廣闊市場前景。 為什么要選用 OpenCV? OpenCV 之所以大行其道,是因為其簡單易用。 作為一個開源的計算機視覺庫,OpenCV 由 C++語言編寫,讀者可以通過閱讀源碼對算法的實現細節進行學習,可讀性好。另外,OpenCV 還實現了很多圖像處理和計算機視覺中的通用算法,在 Linux、Windows、Android 和 macOS 等操作系統上均可運行,即一套代碼能在多種系統中運行,通用性好。 OpenCV 支持 C++、Python、Java 等語言和 MATLAB 等多種程序接口,在最新版本中還提供了對 C#、Ch、Ruby、Go 語言的支持,不同語言中的接口名稱和參數差異較小,用戶在不同的開發環境中只需改寫少量代碼即可使用,一致性好。 OpenCV 在圖像處理領域深耕多年,不僅對算法做了很多優化,還針對實用場景做了加速處理,如支持對 CUDA 等硬件的加速。另外,它還可以通過引入 Intel 的 IPP 高性能多媒體函數庫獲得更高的運行處理速度,高效性好。 OpenCV 大受歡迎還有一個重要的原因,就是當前深度學習和計算機視覺的飛速發展。在計算機視 | OpenCV 4 快速入門:基于 Python 的算法實戰 | 覺中進行模型訓練和使用時,需要對輸入圖像做很多預處理和后處理,這些都需要用到 OpenCV 庫。OpenCV 中很多算法的實現可以彌補深度學習模型推理耗時的缺陷,在某些特定場景下,OpenCV 中的傳統算法可以獲得與深度學習方法相差不大的結果,但在執行速度上遠勝于深度學習方法,應用性好。 為什么要用 OpenCV 4? 不管什么軟件,新版本的出現基本上都是因為對舊版本的代碼做了很大力度的重構或增加了很多新特性,已經無法與舊版本兼容。 OpenCV 4 版本升級中廢棄了一些舊的 API,對一些枚舉類型的名稱寫法做了修改,對一些函數的參數做了調整,還有一個比較重要的變化就是增加了對 dnn 模塊的支持。如果讀者目前使用的是 OpenCV 3,那么也不必對這些變化有過多的焦慮,因為 OpenCV 的錯誤提示清晰易懂,錯誤定位與修改均比較快速、簡單。 此外,建議讀者在學習一門新技術時,最好選用較新的軟件版本,因為很多軟件在發展過程中會逐漸停止對舊版本的支持。 這本書與別的圖書有什么不同? OpenCV 對圖像處理和計算機視覺算法做了系統封裝,這些算法被劃分為很多模塊,其中最重要的就是 core 模塊(第 3 章)和 imgproc 模塊(第 4 章和第 5 章),而很多同類圖書的內容就是圍繞這兩個模塊展開的,但是本書內容沒有局限于此。 本書以 OpenCV 模塊來分章節作為寫作思路,在每章的開始都有對模塊的導讀,導讀內容依托OpenCV 源碼,講述了本模塊封裝的算法函數,對其中的函數和數據結構做了清晰明了的注釋,因此, 導讀內容既可以為讀者學習算法提供幫助,又可以為讀者開發查詢提供參考。 本書在第 1 章講述了 C++開發語言和 Python 開發語言,以及 Windows 和 Linux 系統中的OpenCV 開發環境的搭建,只要讀者按照案例中的操作步驟執行,就能夠順利地運行 OpenCV 庫,不必為開發環境搭建中的各種問題焦頭爛額。 core 模塊和 imgproc 模塊的重要性毋庸置疑,本書也針對這兩個模塊總結了很多案例,對這兩個模塊的算法做了透徹的講解。但對于其他模塊,如可視化模塊 highgui、視頻處理模塊 videoio、視頻分析模塊 video、照片處理模塊 photo、2D 特征模塊 features2d、相機標定與三維重建模塊 calib3d、傳統目標檢測模塊 objdetect、機器學習模塊 ml、深度學習模塊 dnn,在其他圖書中鮮有涉及,而本書對這些模塊都做了詳細導讀和案例講解。 這種系統化的講解能夠讓讀者對 OpenCV 有一個全面的認識,也能夠讓讀者有機會了解 OpenCV 的強大功能,為讀者在處理特殊需求時提供知識儲備。 最后,感謝家人、朋友和出版社對本書寫作的支持。希望本書能夠給對 OpenCV 和圖像處理有需求的讀者以幫助,對于書中的疏漏之處,請不吝指教。如果有深度學習和計算機視覺學習需求的讀者,敬請關注我的另一本圖書《深度學習計算機視覺實戰》,該書對深度學習和計算機視覺算法的基礎、圖像處理基礎、計算機視覺案例、TensorFlow Lite,以及基于 TensorFlow Lite 在移動端和 PC 端的部署做了一站式的講解,在此對您的支持表示衷心的感謝。 |