OpenCV簡介
OpenCV是計算機視覺領域應用最廣泛的開源工具包,基于C/C++,支援Linux/Windows/MacOS/Android/iOS,并提供了Python,Matlab和Java等語言的接口,因為其豐富的接口,優秀的性能和商業友好的使用許可,不管是學術界還是業界中都非常受歡迎。OpenCV最早源于Intel公司1998年的一個研究項目,當時在Intel從事計算機視覺的工程師蓋瑞·布拉德斯基(Gary Bradski)通路一些大學和研究組時發現學生之間實作計算機視覺算法用的都是各自實驗室裡的内部代碼或者庫,這樣新來實驗室的學生就能基于前人寫的基本函數快速上手進行研究。于是OpenCV旨在提供一個用于計算機視覺的科研和商業應用的高性能通用庫。 第一個alpha版本的OpenCV于2000年的CVPR上釋出,在接下來的5年裡,又陸續釋出了5個beta版本,2006年釋出了第一個正式版。2009年随着蓋瑞加入了Willow Garage,OpenCV從Willow Garage得到了積極的支援,并釋出了1.1版。2010年OpenCV釋出了2.0版本,添加了非常完備的C++接口,從2.0開始的版本非常使用者非常龐大,至今仍在維護和更新。2015年OpenCV 3正式釋出,除了架構的調整,還加入了更多算法,更多性能的優化和更加簡潔的API,另外也加強了對GPU的支援,現在已經在許多研究機構和商業公司中應用開來。
官網:
https://opencv.org/OpenCV的結構
目前的OpenCV也有兩個大版本,OpenCV2和OpenCV3。相比OpenCV2,OpenCV3提供了更強的功能和更多友善的特性。不過考慮到和深度學習架構的相容性,以及上手安裝的難度,這部分先以2為主進行介紹。
根據功能和需求的不同,OpenCV中的函數接口大體可以分為如下部分:
- core:核心子產品,主要包含了OpenCV中最基本的結構(矩陣,點線和形狀等),以及相關的基礎運算/操作。
- imgproc:圖像處理子產品,包含和圖像相關的基礎功能(濾波,梯度,改變大小等),以及一些衍生的進階功能(圖像分割,直方圖,形态分析和邊緣/直線提取等)。
- highgui:提供了使用者界面和檔案讀取的基本函數,比如圖像顯示視窗的生成和控制,圖像/視訊檔案的IO等。
如果不考慮視訊應用,以上三個就是最核心和常用的子產品了。針對視訊和一些特别的視覺應用,OpenCV也提供了強勁的支援:
- video:用于視訊分析的常用功能,比如光流法(Optical Flow)和目标跟蹤等。
- calib3d:三維重建,立體視覺和相機标定等的相關功能。
- features2d:二維特征相關的功能,主要是一些不受專利保護的,商業友好的特征點檢測和比對等功能,比如ORB特征。
- object:目标檢測子產品,包含級聯分類和Latent SVM
- ml:機器學習算法子產品,包含一些視覺中最常用的傳統機器學習算法。
- flann:最近鄰算法庫,Fast Library for Approximate Nearest Neighbors,用于在多元空間進行聚類和檢索,經常和關鍵點比對搭配使用。
- gpu:包含了一些gpu加速的接口,底層的加速是CUDA實作。
- photo:計算攝像學(Computational Photography)相關的接口,當然這隻是個名字,其實隻有圖像修複和降噪而已。
- stitching:圖像拼接子產品,有了它可以自己生成全景照片。
- nonfree:受到專利保護的一些算法,其實就是SIFT和SURF。
- contrib:一些實驗性質的算法,考慮在未來版本中加入的。
- legacy:字面是遺産,意思就是廢棄的一些接口,保留是考慮到向下相容。
- ocl:利用OpenCL并行加速的一些接口。
- superres:超分辨率子產品,其實就是BTV-L1(Biliteral Total Variation – L1 regularization)算法
- viz:基礎的3D渲染子產品,其實底層就是著名的3D工具包VTK(Visualization Toolkit)。
從使用的角度來看,和OpenCV2相比,OpenCV3的主要變化是更多的功能和更細化的子產品劃分。
OpenCV安裝和使用
Windows下的安裝
Windows10+Python3.6(Anaconda3)+OpenCV3.4安裝配置
Windows10下OpenCV_contrib安裝配置