當前位置:
首頁 > 最新 > 圖像處理利器OpenCV

圖像處理利器OpenCV

OpenCV的全稱:Open Source Computer Vision Library。

1999年,OpenCV項目由Intel位於俄羅斯的研發團隊發起,旨在建立一個開源的計算機視覺庫。從開發之日起就得到了迅猛發展,獲得了眾多公司和業界大牛的鼎力支持與貢獻,因為是BSD開源許可,因此可以免費應用在科研和商業應用領域。

OpenCV可運行在Linux、Windows和MacOS操作系統上,它輕量級而高效,OpenCV中多數模塊是基於C++實現的,其中有少部分是C語言實現的,當前OpenCV提供的SDK已經支持C++、Java、Python、MATLAB等語言應用開發,提供了圖像處理和計算機視覺方面的很多通用演算法和基礎類庫。

2006年OpenCV 1.0版本正式發布,2008年OpenCV獲得了當時還如日中天的機器人公司Willow Garage的支持,不幸的是作為機器人業界的傳奇,該公司於2014年倒閉了。

2009年對OpenCV產生重大影響的2.0版本發布了,它的最大變換是添加了C++介面,把OpenCV中很多C語言的數據和API進行了優化,目標是建立一個易用、類型安全、新功能、性能更加的版本。2012年OpenCV正式被非盈利組織OpenCV.org接管,維護其用戶與開發者社區網站。2.0版本的用戶非常龐大,至今仍在維護和更新。2015年OpenCV 3正式發布,除了架構的調整,還加入了更多演算法,更多性能的優化和更加簡潔的API,另外也加強了對GPU的支持。也就是說和Python一樣,當前OpenCV也有兩個大版本,OpenCV 2和OpenCV 3。相比OpenCV 2,OpenCV 3提供了更強的功能和更多方便的特性。

核心功能包括:

二維和三維特徵工具箱

運動估算

人臉識別系統

姿勢識別

人機交互

移動機器人

運動理解

對象鑒別

分割與識別

立體視覺

運動跟蹤

增強現實

從函數介面方面看,分為如下部分:

core:核心模塊,主要包含了OpenCV中最基本的結構:矩陣、點線、形狀等,以及相關的基礎運算和操作。

imgproc:圖像處理模塊,包含和圖像相關的基礎功能:濾波、梯度、改變大小等,以及一些衍生的高級功能:圖像分割、直方圖、形態分析和邊緣/直線提取等。

highgui:提供了用戶界面和文件讀取的基本函數,比如圖像顯示窗口的生成和控制,圖像/視頻文件的I/O等。

ml:機器學習演算法模塊,包含一些視覺中最常用的傳統機器學習演算法。

OpenCV的機器學習演算法模塊具體包括:

Boosting演算法

Decision Tree學習

Gradient Boosting演算法

EM演算法

KNN演算法

樸素貝葉斯分類

人工神經網路

隨機森林

支持向量機

最近在用OpenCV,並翻了一下《Learning OpenCV》中文版,感覺在學校那會應該看過這本書,當時應該是為了弄明白什麼是機器學習,這本書的第13章就叫做:機器學習,我覺得講得很好:

機器學習的目的是把數據轉換成信息。在學習了一系列數據之後,我們需要機器能夠回答與這些數據有關的問題:其他還有哪些數據和本數據最相似?圖像中有沒有汽車?哪個廣告最能得到消費者的響應?由於消費者經常考慮價格因素,這個問題會變為:在我們銷售的所有產品中,如果要做廣告,哪個產品會最熱銷?機器學習通過從數據里提取規則或模式來把數據轉換成信息。

機器學習針對的數據經常被預處理成「特徵」,機器學習演算法分析我們收集的數據,分配權重、閾值和其他參數來提高性能,這個調整參數來達到目的的過程被稱為「學習」,知道機器學習方法的性能很重要,而且這是一個精細的問題,如果分類器效果好,我們就有了一個有潛在價值的「模型」,我們可以在真實世界裡應用它。

有的時候,數據沒有標籤,我們僅僅想根據邊緣信息看看人臉傾向於哪個組,我們是對數據是否能自然歸類感興趣,這種學習演算法叫「聚類演算法」。有的時候,數據有標籤,比如年齡。這類有標籤的機器學習是「有監督」的,如果數據向量沒有標籤,則表明這種機器學習是「無監督」的。有監督的學習可以來判斷種類,當我們賦予一個東西標籤,表明我們在做「分類」,如果輸出是數值,則表明我們在進行「回歸」。有監督的學習也有一些模糊領域:它包括數據向量和標籤的一一匹配,也包括「強化學習」,在強化學習中,數據標籤能在單獨的數據向量被觀察之後存在很久。在強化學習中,系統獲得一個延遲的信號,也叫「獎勵」或「懲罰」,根據這個信號再推斷下一步的策略。

這兩個典型的機器學習任務:分類和聚類,與計算機視覺中兩個基本任務:「識別」和「分割」,有共通之處。我們需要計算機判斷物體是什麼的時候,我們使用識別,我們需要計算機說出物體的位置的時候,我們使用分割。

OpenCV 包含了一些當前用得最多的統計機器學習方法,概率機器學習方法,像貝葉斯網路和圖模型,在OpenCV中支持得比較少,部分原因是這些演算法還很新,還在成長中,變化會很大。OpenCV傾向於支持「判別演算法」,即通過給定數據來判斷類別,而不傾向於「產生式演算法」,產生式演算法是通過給定類別來生成數據的分布。

這本書如今十年了。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 老王AI路 的精彩文章:

TAG:老王AI路 |