opencv是乙個用於影象處理、分析、機器視覺方面的開源函式庫.
無論你是做科學研究,還是商業應用,opencv都可以作為你理想的工具庫,因為,對於這兩者,它完全是免費的。
該庫採用c及c++語言編寫,可以在windows, linux, mac osx系統上面執行。該庫的所有**都經過優化,計算效率很高,因為,它更專注於設計成為一種用於實時系統的開源庫。opencv採用c語言進行優化,而且,在多核機器上面,其執行速度會更快。它的乙個目標是提供友好的機器視覺介面函式,從而使得複雜的機器視覺產品可以加速面世。該庫包含了橫跨工業產品檢測、醫學影象處理、安防、使用者介面、攝像頭標定、三維成像、機器視覺等領域的超過500個介面函式。
同時,由於計算機視覺與機器學習密不可分,該庫也包含了比較常用的一些機器學習演算法。或許,很多人知道,影象識別、機器視覺在安防領域有所應用。但,很少有人知道,在航拍、街道(例如google street view)中,要嚴重依賴於機器視覺的攝像頭標定、影象融合等技術。
近年來,在入侵檢測、特定目標跟蹤、目標檢測、人臉檢測、人臉識別、人臉跟蹤等領域,opencv可謂大顯身手,而這些,僅僅是其應用的冰山一角。
如今,來自世界各地的各大公司、科研機構的研究人員,共同維護支援著opencv的開源庫開發。這些公司和機構包括:微軟,ibm,索尼、西門子、google、intel、斯坦福、mit、cmu、劍橋。。。
儘管之前寫過一篇關於opencv的介紹(
),但依然有朋友對其不甚了解。所以,經常能碰到有人問我諸如以下一些問題:
opencv能不能實現人臉識別?
opencv有沒有車輛檢測的api?
opencv有沒有三維重建的函式?
面對這樣的問題,我也很困惑。到底該如何給他們解釋,才能讓它們明白,opencv確實很強大,但還沒有他們想象中的那麼強大。
其實,opencv的全稱,是open source computer vision library,開放源**計算機視覺庫。也就是說,它是一套關於計算機視覺的開放源**的api函式庫。
這也就意味著,
(1)不管是科學研究,還是商業應用,都可以利用它來作開發;(
2)所有api函式的源**都是公開的,你可以看到其內部實現的程式步驟;
(3)你可以修改opencv的源**,編譯生成你需要的特定api函式。但是,作為乙個庫,它所提供的,僅僅是一些常用的,經典的,大眾化的演算法的api。
乙個典型的計算機視覺演算法,應該包含以下一些步驟:
(1)資料獲取(對opencv來說,就是);
(2)預處理;
(3)特徵提取;
(4)特徵選擇;
(5)分類器設計與訓練;
(6)分類判別;
而opencv對這六個部分,分別(記住這個詞)提供了api。下面我分別就這六個部分來進行一些常見問題的解釋。
2、 對於預處理,一般就是去除或者降低雜訊,光照歸一化,亮度歸一化,模糊化,銳化,膨脹,腐蝕、開閉等這些操作(詳見,岡薩雷斯,《數字影象處理》一書)。而對於這些操作,opencv分別(又提到這個詞了)提供了相應api函式。而光照的預處理,opencv提供了乙個直方圖均衡化的api,後續可能會提供一些gammar矯正之類的函式。
3、 對於特徵提取,個人認為,可以算是整個計算機視覺系統中最為複雜也最難的部分(純屬個人意見,如若不同,請保留),到底什麼是特徵,該如何來理解這個看似簡單確又包羅永珍的名詞呢?其實,要想仔細解釋,還真的花費很多時間(有興趣的可以看看,richard o.duda(著),李巨集東(譯),《模式識別》,機械工業出版社)。簡單點說,特徵,就是乙個可以將若干個類別可以盡量分開的一種描述。舉例來說,如果你要進行男人和女人的分類,顯然,用「身高和體重」這一描述來衡量,是可以的,但是,這兩者沒有「胸部大小」這一描述更加準確,而「胸部大小」這一描述,又沒有「喉結的有無」這一描述更準確。很顯然,「身高和體重」,「胸部大小」,「喉結的有無」,這三種描述,都可以用來進行男人和女人的分類,只不過,它們對事物的描述的準確(或者說全面)程度是不同的,而諸如此類的描述,有乙個更加專業,叫做「特徵」。opencv裡面,提供了一些特徵描述的api,比如,對於人臉檢測而言,它提供了haar特徵的api,行人檢測,提供了hog特徵的api,甚至,它提供了lbp紋理特徵的api。但是,這些還遠遠不夠。例如,如果你要進行字元識別,opencv並沒有提供字元識別所對應的特徵。這個時候,就需要你自己來程式設計實現了。當然,該選擇什麼特徵來描述字元呢?哪些特徵更好呢?對於這些問題,我建議你去閱讀相應的會議,期刊,雜誌,碩士、博士畢業**,看看別人寫的文章,自然就知道了。
4、 對於特徵選擇,opencv並沒有提供特定的函式來進行衡量。而特徵的分類能力的高低評價,有很多種分析方法,有興趣的朋友,可以閱讀"《機器學習》tom. mitchell(著),曾華軍(譯),機械工業出版社"這本書;
5、 對於分類器部分,opencv提供了svm,cart,boost,bayes,bdt,ann,這幾種常用的演算法。而這些基本已經覆蓋了常用的分類器。所以,你需要做的,就是知道怎麼呼叫其介面,各種分類器的優點和缺點(該部分,建議閱讀「機器學習」這本書)。
通過以上的分析,你或許已經發現,opencv不過是乙個工具庫而已。或者,你可以將它理解為積木,而opencv中的函式,則可以理解為乙個乙個的積木塊,利用所有或者部分積木塊,你可以快速的搭建起來具體的計算機視覺方面的應用(比如,字元識別,車牌識別,遺留物檢測)。想必你也已經發現,在利用opencv這個積木來搭建具體的計算機視覺應用的時候,真正核心的,應該是這些積木塊,如果你明白了積木塊的工作原理,那麼,是不是就可以不用這些積木塊了呢?完全正確!不過,一般部分情況下,我們不需要這麼做,因為,opencv已經幫你做好了一些工作(已經幫你做好了一些積木塊,直接拿來用就是了)。但是,諸如前面提到的特徵提取,很多情況下,opencv就無能為力了。這個時候,你就需要翻閱計算機視覺、模式識別、機器學習領域頂級會議、期刊、雜誌上面發表的文章了。然後,根據這些文章中闡述的原理和方法,來程式設計實現你要的東西。實際上,也就等於搭建乙個屬於你私有的積木塊。其實,opencv中的每乙個api函式,也就是這麼來的。
OpenCV 計算機視覺庫
opencv是乙個由因特爾公司支援的開源機器視覺庫,關於它的介紹,網上隨便一搜就車載斗量。這裡我不談視覺庫的主要內容,而是將這段時間來對它的使用心得作個簡單介紹,以啟發打算用這個庫的朋友的思路,與大家一起來分享。在學校的時候,雖然是影象處理研究方向,但真正具體的應用到影象的很多東西,還是在參加工作以...
計算機視覺 OpenCV開源庫講解(邊緣提取)
在圖形影象中,梯度和邊緣是非常相似的性質,在處理影象中,常常提取影象的邊緣加以運算,下面介紹乙個常用的邊緣提取運算元 canny運算元 canny的目標是找到乙個最優的邊緣檢測演算法,最優邊緣檢測的含義是 好的檢測 演算法能夠盡可能多地標識出影象中的實際邊緣。好的定位 標識出的邊緣要與實際影象中的實...
OpenCV 開源的計算機視覺庫 (中文翻譯)
intel 開源計算機視覺庫 opencv 翻譯 hunnish,阿須數碼 opencv 是英特爾 開源計算機視覺庫。它由一系列 c 函式和少量 c 類構成,實現了影象處理和計算機視覺方面的很多通用演算法。opencv 是乙個跨平台的中 高層 api 構成,目前包括 300 多個 c 函式。它不依賴...