電腦視覺技術的應用越來越廣泛,有非常多的軟體工具和函數庫可以用來建置電腦視覺應用,針對Python的OpenCV就是一個很好的選擇,本書正是針對以Python為基礎的OpenCV來說明的。
Python和OpenCV結合,必將產生巨大的威力。本書以OpenCV官方文件的知識脈絡為主線,在此基礎上對細節進行補充和說明。
本書不僅介紹 OpenCV 函數的使用方法,還介紹函數實現的演算法原理。在介紹 OpenCV 函數的使用方法時,提供大量的程式示例。在介紹函數對圖像的處理前,先展示函數對數值、陣列的處理,方便讀者從數值的角度觀察和瞭解函數的處理過程和結果。在介紹具體的演算法原理時,使用通俗易懂的語言和貼近生活的示例來說明問題,避免使用過多複雜抽象的公式。
適合讀者群:電腦視覺領域的初學者、專業技術人員、影像處理愛好者,或相關科系師生做為學習參考教材。
本書特色
❏介紹以Python為基礎的OpenCV視覺函數庫的使用
❏內容通俗易懂、生動有趣,案例豐富,實用性強
作者簡介:
李立宗
南開大學碩士,天津職業技術師範大學副教授,從事電腦視覺領域的教學和研究。主編《OpenCV程式設計案例詳解》等多本圖書,在網易雲課堂主講《OpenCV圖窮匕見》等多門課程。
作者序
前言
目前,電腦視覺技術的應用越來越廣泛。伴隨著硬體裝置的不斷升級,建置複雜的電腦視覺應用變得越來越容易了。有非常多的軟體工具和函數庫可以用來建置電腦視覺應用, 而針對Python 的OpenCV(OpenCV for Python)就是一個很好的選擇,本書正是針對Python 為基礎的OpenCV 來說明的。
✤ 本書的主要內容和特點
OpenCV 本身是一個「黑盒」,它為我們提供了介面(參數、傳回值)。
我們只需要掌握介面的正確使用方法,就可以在完全不了解其內部工作原理(演算法)的情況下,方便地進行各種複雜的影像處理。在這一點上,它和Photoshop 等工具是相似的,只要掌握了正確的使用方法,就能夠獲得正確的處理結果。它們都嘗試讓我們專注於影像處理本身,而不用去考慮演算法實現的細節。
在學習Photoshop 時,我們學習的是如何使用它的功能,而不需要系統地學習每個功能所採用的演算法原理。但是很明顯,我們在使用OpenCV進行影像處理時,是不能完全忽略演算法實現的,否則是不可能用好OpenCV 的,更不能設計出好的電腦視覺應用系統。
從上述角度講,我們可以從兩個角度學習OpenCV:
■ 將 OpenCV 作為「白盒」學習:深入學習 OpenCV 每個函數所使用演算法的基本原理、每個函數的實作方式細節,進一步加深對影像處理的了解。
■ 將 OpenCV 作為「黑盒」學習:僅將 OpenCV 作為一個工具來使用,學習的是每個函數內參數的含義和使用方式,學習的目的是更進一步地使用OpenCV 函數。
本書儘量幫助讀者在「黑盒」學習和「白盒」學習之間取得平衡。在介紹實際的演算法原理時,儘量使用通俗容易的語言和接近生活的範例來說明問題,避免使用過多複雜抽象的公式。希望這樣的安排能夠幫助讀者更進一步地掌握電腦視覺的相關知識,更透徹地了解電腦視覺的相關演算法。在介紹OpenCV 函數的使用方法時,我們為讀者提供了大量的程式範例。而且在介紹函數對影像的處理前,常常先展示函數對數值、陣列的處理,方便讀者從數值的角度觀察和了解函數的處理過程和結果。希望這些例題能夠幫助讀者更進一步地了解OpenCV 處理影像的方式,快速地掌握OpenCV 的使用方法,更進一步地使用OpenCV 進行影像處理。需要說明的一點是,本書為黑白印刷,無法極佳地呈現某些程式的執行效果,請讀者自行執行程式並觀察結果。
在內容的設定上,本書以OpenCV 官方文件的知識脈絡為主線,在此基礎上對細節進行補充和說明。
為了方便讀者學習,本書力求將每一個基礎知識作為一個獨立的點來介紹和說明。在介紹基礎知識時,儘量採用從零開始的方式,以避免讀者在學習過程中需要不斷地離開目前基礎知識,去查閱相關背景資料。但是由於篇幅有限,如果某一函數已經在前面介紹過,在後面用到該函數時,就沒有重複介紹,而是列出介紹該函數語法的章節位置,方便讀者參考閱讀。
本書適合電腦視覺領域的初學者閱讀,包含在校學生、教師、專業技術人員、影像處理同好。
✤ 感謝
首先,我要感謝我的老師高鐵杠教授,感謝高老師帶我走進電腦視覺這一領域,讓我對電腦視覺產生濃厚的興趣,更要感謝高老師一直以來對我的關心和幫助。
感謝本書的策劃編輯符隆美老師,他的專業精神讓我留下非常深刻的印象。感謝本書的責任編輯王中英和許豔老師,她們不僅修改很多不通順的敘述和錯別字,還對書中存在的技術問題進行確認和修正,以及為本書出版而付出辛苦的其他工作人員。
感謝OpenCV 開放原始碼函數庫的所有貢獻者。
感謝合作單位天津撥雲諮詢服務有限公司為本書提供的支援。
感謝我的家人,感謝你們一直以來對我的理解、支援和付出。
✤ 互動方式
限於本人功力,書中一定存在很多不足之處,歡迎讀者提出問題和建議,也非常歡迎大家和我交流關於OpenCV 的各種問題,我的電子郵件是lilizong@gmail.com。
李立宗
前言
目前,電腦視覺技術的應用越來越廣泛。伴隨著硬體裝置的不斷升級,建置複雜的電腦視覺應用變得越來越容易了。有非常多的軟體工具和函數庫可以用來建置電腦視覺應用, 而針對Python 的OpenCV(OpenCV for Python)就是一個很好的選擇,本書正是針對Python 為基礎的OpenCV 來說明的。
✤ 本書的主要內容和特點
OpenCV 本身是一個「黑盒」,它為我們提供了介面(參數、傳回值)。
我們只需要掌握介面的正確使用方法,就可以在完全不了解其內部工作原理(演算法)的情況下,方便地進行各種複雜的影像處理。在這一點上,它和Photoshop ...
目錄
前言
01 OpenCV 入門
1.1 如何使用
1.2 影像處理基本操作
1.3 OpenCV 貢獻庫
02影像處理基礎
2.1 影像的基本表示方法
2.2 像素處理
2.3 使用numpy.array 存取像素
2.4 有興趣區域(ROI)
2.5 通道操作
2.6 取得影像屬性
03影像運算
3.1 影像加法運算
3.2 影像加權和
3.3 逐位元邏輯運算
3.4 掩模
3.5 影像與數值的運算
3.6 位平面分解
3.7 影像加密和解密
3.8 數字浮水印
3.9 臉部打碼及解碼
04色彩空間類型轉換
4.1 色彩空間基礎
4.2 類型轉換函數
4.3 類型轉換實例
4.4 HSV 色彩空間討論
4.5 alpha 通道
05幾何轉換
5.1 縮放
5.2 翻轉
5.3 仿射
5.4 透視
5.5 重對映
06設定值處理
6.1 threshold 函數
6.2 自我調整設定值處理
6.3 Otsu 處理
07影像平滑處理
7.1 均值濾波
7.2 方框濾波
7.3 高斯濾波
7.4 中值濾波
7.5 雙邊濾波
7.6 2D 旋積
08形態學操作
8.1 腐蝕
8.2 膨脹
8.3 通用形態學函數
8.4 開運算
8.5 閉運算
8.6 形態學梯度運算
8.7 禮帽運算
8.8 黑帽運算
8.9 核函數
09影像梯度
9.1 Sobel 理論基礎
9.2 Sobel 運算元及函數使用
9.3 Scharr 運算元及函數使用
9.4 Sobel 運算元和Scharr運算元的比較
9.5 Laplacian 運算元及函數使用
9.6 運算元歸納
10 Canny 邊緣檢測
10.1 Canny 邊緣檢測基礎
10.2 Canny 函數及使用
11影像金字塔
11.1 理論基礎
11.2 pyrDown 函數及使用
11.3 pyrUp 函數及使用
11.4 取樣可逆性的研究
11.5 拉普拉斯金字塔
12影像輪廓
12.1 尋找並繪製輪廓
12.2 矩特徵
12.3 Hu 矩
12.4 輪廓擬合
12.5 Convex|Hull
12.6 利用形狀場景演算法比較
12.7 輪廓的特徵值
13長條圖型處理
13.1 長條圖的含義
13.2 繪製長條圖
13.3 長條圖均衡化
13.4 pyplot 模組介紹
14傅立葉轉換
14.1 理論基礎
14.2 Numpy 實現傅立葉轉換
14.3 OpenCV 實現傅立葉轉換
15範本比對
15.1 範本比對基礎
15.2 多範本比對
16霍夫轉換
16.1 霍夫直線轉換
16.2 霍夫圓環轉換
17影像分割與分析
17.1 用分水嶺演算法實現影像分割與分析
17.2 互動式前景分析
18視訊處理
18.1 VideoCapture 類別
18.2 VideoWriter 類別
18.3 視訊操作基礎
19繪圖及互動
19.1 繪畫基礎
19.2 滑鼠互動
19.3 捲軸
20 K 近鄰演算法
20.1 理論基礎
20.2 計算
20.3 手寫數字識別的原理
20.4 自訂函數手寫數字識別
20.5 K 近鄰模組的基本使用
20.6 K 近鄰手寫數字識別
21支援向量機
21.1 理論基礎
21.2 SVM 案例介紹
22 K平均值分群
22.1 理論基礎
22.2 K 平均值聚類模組
22.3 簡單範例
23人臉識別
23.1 人臉檢測
23.2 LBPH 人臉識別
23.3 EigenFaces 人臉識別
23.4 Fisherfaces 人臉識別
23.5 人臉資料庫
A 範例
A-1 範例檔案hist.py
A-2 範例檔案inpaint.py
A-3 範例檔案kmeans.py
B 參考文獻
前言
01 OpenCV 入門
1.1 如何使用
1.2 影像處理基本操作
1.3 OpenCV 貢獻庫
02影像處理基礎
2.1 影像的基本表示方法
2.2 像素處理
2.3 使用numpy.array 存取像素
2.4 有興趣區域(ROI)
2.5 通道操作
2.6 取得影像屬性
03影像運算
3.1 影像加法運算
3.2 影像加權和
3.3 逐位元邏輯運算
3.4 掩模
3.5 影像與數值的運算
3.6 位平面分解
3.7 影像加密和解密
3.8 數字浮水印
3.9 臉部打碼及解碼
04色彩空間類型轉換
4.1 色彩空間基礎
4.2 類型轉換函數
4.3 類型轉換實例
4.4 HSV 色彩空間討論
4....