OpenCV簡介
OpenCV是一個跨平臺的庫,使用它我們可以開發實時的計算機視覺應用程序。 它主要集中在圖像處理,視頻採集和分析,包括人臉檢測和物體檢測等功能。
這一章,讓我們通過定義術語「計算機視覺」來開始。
計算機視覺
計算機視覺可以被定義爲一個學科,解釋如何根據場景中存在的結構的屬性,從其2D圖像重構,中斷和理解3D場景。 它使用計算機軟件和硬件處理建模和複製人類視覺。
計算機視覺與以下領域顯着重疊 -
- 圖像處理 - 它着重於圖像處理。
- 模式識別 - 它解釋了分類模式的各種技術。
- 攝影測量 - 它涉及從圖像獲得準確的測量。
計算機視覺與圖像處理
圖像處理涉及圖像到圖像的轉換。 圖像處理的輸入和輸出都是圖像。
計算機視覺是從物體形象中對物理物體進行明確而有意義的描述。 計算機視覺的輸出是對3D場景中結構的描述或解釋。
計算機視覺的應用
在這裏,我們列舉了計算機視覺大量使用的一些主要領域。
機器人應用
- 本地化 - 自動確定機器人位置
- 導航
- 避免障礙
- 裝配(掛孔,焊接,噴漆)
- 操作(例如PUMA機器人操作器)
- 人機交互(HRI) - 智能機器人與人交互和服務
醫學應用
- 分類和檢測(例如病變或細胞分類和腫瘤檢測)
- 2D/3D分割
- 3D人體器官重建(MRI或超聲)
- 視覺引導機器人手術
工業自動化應用
- 工業檢查(缺陷檢測)
- 部件
- 條碼和包裝標籤讀取
- 對象排序
- 文檔理解(例如OCR)
安全應用
- 生物識別(虹膜,指紋,臉部識別)
- 監視 - 檢測某些可疑活動或行爲
交通運輸應用
- 自主車輛
- 安全,例如駕駛員警惕性監控
OpenCV庫的特點
使用OpenCV庫,可以 -
- 讀取和寫入圖像
- 捕獲並保存視頻
- 過程圖像(過濾,變換)
- 執行功能檢測
- 檢測視頻或圖像中的特定對象,例如臉部,眼睛,汽車。
- 分析視頻,即估計其中的運動,減去背景,並跟蹤其中的對象。
OpenCV最初是用C++開發的。 除此之外,還提供了Python和Java綁定。 OpenCV可以在各種操作系統上運行,如Windows,Linux,OSx,FreeBSD,Net BSD,Open BSD等。
本教程通過使用Java綁定的示例解釋了OpenCV的概念。
OpenCV庫模塊
以下是OpenCV庫的主要庫模塊。
核心功能
該模塊涵蓋了用於構建OpenCV應用程序的基本數據結構,如標量,點,範圍等。 除此之外,還包括用於存儲圖像的多維數組Mat
。 在OpenCV的Java庫中,這個模塊包含在一個名字爲org.opencv.core
的包內。
圖像處理
該模塊涵蓋了各種圖像處理操作,如圖像過濾,幾何圖像轉換,顏色空間轉換,直方圖等。在OpenCV的Java庫中,該模塊包含在一個名稱爲org.opencv.imgproc
的包內。
視頻
本模塊涵蓋了運動估測,背景扣除和對象跟蹤等視頻分析概念。 在OpenCV的Java庫中,這個模塊包含在一個名字爲org.opencv.video
的包內。
視頻I/O
本模塊解釋了使用OpenCV庫的視頻捕獲和視頻編解碼器。 在OpenCV的Java庫中,該模塊由名稱爲org.opencv.videoio
的包提供。
calib3d
該模塊包括有關基本多視圖幾何算法,單個和立體攝像機標定,對象姿態估計,立體對應和三維重建元素的算法。 在OpenCV的Java庫中,該模塊由名稱爲org.opencv.calib3d
的軟件包提供。
features2d
該模塊包含特徵檢測和描述的概念。 在OpenCV的Java庫中,該模塊由名稱org.opencv.features2d
的包提供。
Objdetect
該模塊包括檢測對象和預定義類的實例,例如面孔,眼睛,杯子,人物,汽車等。在OpenCV的Java庫中,該模塊由名稱爲org.opencv.objdetect
的包提供。
Highgui
這是一個易於使用的界面,具有簡單的UI功能。 在OpenCV的Java庫中,這個模塊的功能包含在兩個不同的包中,即org.opencv.imgcodecs
和org.opencv.videoio
。
OpenCV簡史
OpenCV最初是英特爾研究計劃,爲CPU密集型應用提供建議。 它於1999年正式啓動。
- 在2006年,它的第一個主要版本,OpenCV 1.0發佈。
- 2009年10月,第二個主要版本OpenCV 2發佈。
- 2012年8月,OpenCV被非營利組織OpenCV.org採用。