前言
目前,電腦視覺技術的應用越來越廣泛。伴隨著硬體裝置的不斷升級,建置複雜的電腦視覺應用變得越來越容易了。有非常多的軟體工具和函數庫可以用來建置電腦視覺應用, 而針對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。
李立宗