初識OpenCV
簡介
提及計算機視覺(computer vision),就不得不提起圖像處理(image processing)。雖然兩者沒有明確的界線,但是通常將圖像處理理解為計算機視覺的預處理過程。因此,在介紹計算機視覺之前,有必要先介紹圖像處理。
圖像處理一般指數字圖像處理(digital image processing),是通過數學函數和圖像變換等手段,對二維數字圖像進行分析,從而獲得圖像數據中的潛在信息。其內容通常包括圖像壓縮、圖像增強與復原,以及匹配、描述和識別三大部分,涵蓋了噪聲去除、圖像分割、特徵提取等多種處理方法與技術。
計算機視覺是一門研究如何讓機器“看”的科學,即利用計算機來模擬人的視覺機理。它通過攝像頭代替人眼,對目標進行識別、跟蹤和測量,並通過對視覺數據的處理獲取更深層次的信息。例如,通過三維重建技術對環繞建築物一週的視頻進行分析,可以在計算機中重構出建築物的三維模型;又如,通過安裝在車輛上的攝像頭拍攝前方場景,可以推斷車輛是否能夠順利通過前方區域,從而輔助決策。
對於人類來說,通過視覺獲取環境信息是一件非常容易的事情,因此有些人會誤認為實現計算機視覺也是一件簡單的事情,但事實並非如此。計算機視覺本質上是一個“逆問題”,即通過觀測到的信息去恢復被觀測物體或環境的信息。在這個過程中往往會丟失部分信息,導致信息不完整,從而增加問題的複雜性。例如,在使用單個攝像頭拍攝場景時,由於缺失了距離信息,常常會出現圖像中“人比樓房高”的現象。因此,計算機視覺仍然是一項具有挑戰性的研究領域,還有很長的發展道路要走。
無論是圖像處理還是計算機視覺,本質上都需要在計算機中處理數據。因此,研究人員必須面對一個棘手的問題——如何將研究成果通過代碼實現並進行仿真驗證。在這一過程中,經常會遇到重複編寫基礎功能程序的問題,也就是人們常說的“重複造輪子”。
為了給研究人員提供“現成的車輪”,英特爾(Intel)公司提出了開源計算機視覺庫(Open Source Computer Vision Library,OpenCV)的概念。該庫集成了大量圖像處理與計算機視覺領域的通用算法,從而有效避免重複和低效的開發工作,OpenCV 也因此應運而生。
OpenCV 由一系列 C 語言函數和 C++ 類構成。除了支持 C/C++ 開發外,還支持 C#、Ruby 等編程語言,並提供 Python、MATLAB、Java 等語言接口,可運行於 Linux、Windows、macOS、Android 和 iOS 等多種操作系統。OpenCV 的出現極大地優化了計算機視覺算法驗證的流程,因此受到了眾多研究者的青睞。
經過二十多年的發展,OpenCV 已成為計算機視覺領域最重要的工具之一。
參考資料
視頻教學:https://www.bilibili.com/video/BV1jk4y1i7gN
圖書教學:https://www.epubit.com/bookDetails?id=UB7209964621702
參考代碼:https://github.com/tungchiahui/OpenCV_Projects