電腦視覺技術應用越來越廣泛,有許多軟體工具和函式庫,可用於建置電腦視覺應用,其中OpenCV就是一個很好的切入領域。

OpenCV簡介
OpenCV全名是Open Source Computer Vision Library,是當今最知名、也最被廣泛採用的影像處理函式庫,它是由Intel發起並參與開發,以BSD授權條款發行,可在商業和研究領域中免費使用,目前是非營利的基金組織OpenCV.org進行維護。
OpenCV 1.0版在2006年釋出,當初以C語言為開發程式主體,當時受到廣大的歡迎,但缺點就是程式設計師要自行做記憶體管理,因此在開發大型程式時較為不方便。
於是之後變有OpenCV 2.0在2009年釋出,該版本的主要以C++開發設計,使得記憶體管理方便許多,以我們示範使用的2.x.yy就是2.0版,x代表為小改版,可能是功能增強或提供新功能,yy代表功能除錯。
OpenCV 3.0於2015年6月釋出,有部分的模組變動,GPU的平行處理是3.0的變動重點。
歷經3年後,在2018年11月,OpenCV 4.0正式版強勢來襲! 進一步改善了核心接口,並添加了二維碼檢測器、ONNX 轉換格式等新特點,在深度學習部份有重大變革,重要更新如下:
-OpenCV 4.0 現在是能與C++函式庫兼容的編譯器。
-core 模組中的 Persistence(用於存儲和加載 XML、YAML 或 JSON 格式的結構化數據)可以完全使用 C++ 來重新實現,因此在4.0版的 C API 也被移除。
-添加了新模組 G-API,它可作為基於圖的高效圖像處理流程。
-dnn 模組包括實驗用 Vulkan 後端,且支持 ONNX 格式的網絡。
-實現了流行的 Kinect Fusion 算法,且為 CPU 和 GPU (OpenCL) 進行優化。
-objdetect 模組中添加了二維碼檢測器和解碼器。
-將高效、高質量的 DIS dense optical flow 算法從 opencv_contrib 移到 video 模組。
目前Opencv模組如下表所列:

OpenCV在影像處理方面應用廣泛,可以讀取儲存圖片、視訊、矩陣運算、統計、影像處理等,可用在物體追蹤、人臉辨識、紋理分析、動態視訊的影像處理等。
OpenCV提供簡單的GUI介面,例如將影像顯示在螢幕上,在視窗上加上滑動桿和偵測滑鼠和鍵盤輸入,方便我們驗證或呈現結果。但因為OpenCV當初設計的時候著重在演算法的處理,所以關於系統硬體的支援,和介面元件的完整度都不高,所以假使想要開發完整的C/C++應用程式,還是需要像Qt、 wxWidets之類的應用程式框架。
OpenCV提供的函式方便我們推演更進階的影像處理演算法,此部份就像MATLAB的功用,但是執行速度比MATLAB快上許多,通常也比我們自己用C/C++寫的函式還快,而除了C/C++之外,OpenCV也提供其他程式語言的支援,像Java或Python等,可支援的程式相當多。
你可以應用OpenCV 在哪些領域?
OpenCV(開放原始碼之電腦視覺化)包含多種即時電腦視覺功能的函式庫。因此,OpenCV在影像處理方面應用非常廣泛,舉凡即時人臉偵測識別、物體識別、動作識別、物體追蹤、動態視訊…等抓取影像後進行識別的工作,搭配機器學習、深度學習相關的函式庫,使電腦視覺(Computer Vision)與人工智慧(AI)應用逐漸普遍且廣泛應用在生活中及工作當中,例如:汽車自動停車、輔助駕駛、車道偏移偵測等技術都和物件偵測息息相關。在工業產線上更大量應用此技術來做產品瑕疵改良率,物件偵測精準度一直是大家關注的焦點,期待OpenCV能帶來不一樣的貢獻。
OpenCV常見應用領域如下:
-影像處理
-人機介面(HCI)
-物件辨識
-影像切割
-人臉辨識
-移動偵測
-場景重構(Structure From Motion)
-立體聲和多台攝影機校正及深度計算
-移動機器人視覺
想了解更多的OpenCV原理與應用嗎?可以參考下列課程:
線上課程:Python + OpenCV 輕鬆上手玩 AI 影像辨識
實體課程:OpenCV商品影像AI辨識實務