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.imgcodecsorg.opencv.videoio

OpenCV簡史

OpenCV最初是英特爾研究計劃,爲CPU密集型應用提供建議。 它於1999年正式啓動。

  • 在2006年,它的第一個主要版本,OpenCV 1.0發佈。
  • 2009年10月,第二個主要版本OpenCV 2發佈。
  • 2012年8月,OpenCV被非營利組織OpenCV.org採用。