OpenCV淺析及相關資源

轉自:http://blog.csdn.net/holybin/article/details/17783491

總結:

opencv給予一個開放庫供你參考和使用,你也可以自己模仿並建立自己的私有庫。

1、對於預處理,一般就是去除或者降低噪聲,光照歸一化,亮度歸一化,模糊化,銳化,膨脹,腐蝕、開閉等這些操作。而對於這些操作,OpenCV分別提供了相應API函數。而光照的預處理,OpenCV提供了一個直方圖均衡化的API,後續可能會提供一些gammar矯正之類的函數。

詳見,岡薩雷斯,《數字圖像處理》一書

 

2、對於特徵提取,OpenCV裏面提供了一些特徵描述的API,比如,對於人臉檢測而言,它提供了haar特徵的API,行人檢測,提供了hog特徵的API,甚至,它提供了LBP紋理特徵的API。

詳見Richard O.Duda(著),李宏東(譯),《模式識別》,機械工業出版社


3、對於特徵選擇,OpenCV並沒有提供特定的函數來進行衡量。而特徵的分類能力的高低評價,有很多種分析方法。

詳見《機器學習》Tom. Mitchell(著),曾華軍(譯),機械工業出版社

 

4、 對於分類器部分,OpenCV提供了SVM,CART,boost,bayes,bdt,ANN,這幾種常用的算法。而這些基本已經覆蓋了常用的分類器。所以,你需要做的,就是知道怎麼調用其接口,各種分類器的優點和缺點。

詳見 “機器學習”這本書


5、這裏還有一些opencv相關的書籍和源碼:

Learning OpenCV:中文版  英文版  源代碼

OpenCV教程-基礎篇:電子書(已標目錄)  源代碼

The OpenCV Reference Manual_release2.3

The OpenCV Tutorials

常用的站點:

OpenCV主頁:http://opencv.org/

OpenCV中文網站:http://wiki.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5,對應的論壇:http://www.opencv.org.cn/forum.php

opencvchina:http://www.opencvchina.com/forum.php

cvchina:http://www.cvchina.info/

推薦大神的OpenCV學習筆記:

http://blog.csdn.net/column/details/opencv-manual.html

====================================================================================================================================

有篇介紹寫的很好,轉載過來僅供參考:http://blog.csdn.net/carson2005/article/details/6979806

        儘管之前寫過一篇關於OpenCV的介紹(http://blog.csdn.net/carson2005/article/details/5822149),但依然有朋友對其不甚瞭解。所以,經常能碰到有人問我諸如以下一些問題: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。下面我分別就這六個部分對一些常見問題進行必要的解釋。

        對於數據獲取,計算機視覺領域的數據,無非就是圖片和視頻兩種。圖片,有bmp,jpg,png,tiff....各種壓縮和非壓縮格式。所以,對壓縮格式的圖片而言,OpenCV內部必然包含了對應的圖片解壓縮函數(一般都是包含了開源的圖片解壓函數庫,例如,對於jpg壓縮格式而言,就包含了libjpg開源庫)。而對於視頻而言,常見的有.rmvb,.avi,.asf等格式,不同的格式,代表着不同的視頻壓縮算法(對於AVI格式,儘管都是avi格式,但內部的壓縮算法仍然不相同。具體原因請參考我的另一篇博客:http://blog.csdn.net/carson2005/article/details/6314089),也就需要對應的解壓算法來解壓。儘管OpenCV提供了一些讀寫視頻文件的API,但是,它也僅僅是一個接口而已,其內部,依然需要調用相應的視頻編解碼器的API來進行解碼。常用的視頻編解碼器有:xvid,ffmpeg等。也就是說,如果你想利用OpenCV來進行視頻讀寫之類的操作,是需要安裝此類視頻編解碼器的。安裝了相應的視頻解碼器之後,你就可以調用OpenCV的視頻相關API來進行視頻文件的讀取操作了,當然,視頻文件被解碼之後,變成了一張一張的圖片,然後才能被OpenCV所處理。另外,還有一種情況,就是數據來自於相機,包括數字相機和模擬相機。不管是哪種相機,你都要想辦法獲取到相機發送給PC的圖片數據(PC在內存裏面接收到的來自相機的數據可能是jpg格式,也可能是bmp格式)。如果,你在PC內存中接收到的是相機發送過來的jpg壓縮格式,還需要進行圖片數據的內存解壓。關於相機和OpenCV的這部分內容,請見我另一篇博客:

http://blog.csdn.net/carson2005/article/details/6243476

        對於預處理,一般就是去除或者降低噪聲,光照歸一化,亮度歸一化,模糊化,銳化,膨脹,腐蝕、開閉等這些操作(詳見,岡薩雷斯,《數字圖像處理》一書)。而對於這些操作,OpenCV分別(又提到這個詞了)提供了相應API函數。而光照的預處理,OpenCV提供了一個直方圖均衡化的API,後續可能會提供一些gammar矯正之類的函數。

        對於特徵提取,個人認爲,可以算是整個計算機視覺系統中最爲複雜也最難的部分(純屬個人意見,如有異議,請保留),到底什麼是特徵,該如何來理解這個看似簡單卻又包羅萬象的名詞呢?其實,要想仔細解釋,還真的花費很多時間(有興趣的可以看看,Richard O.Duda(著),李宏東(譯),《模式識別》,機械工業出版社)。簡單點說,特徵,就是一個可以將若干個類別可以儘量分開的一種描述。舉例來說,如果你要進行男人和女人的分類,顯然,用“身高和體重”這一描述來衡量,是可以的,但是,這兩個描述沒有“胸部大小”這一描述更加準確,而“胸部大小”這一描述,又沒有“喉結的有無”這一描述更準確。很顯然,“身高和體重”,“胸部大小”,“喉結的有無”,這三種描述,都可以用來進行男人和女人的分類,只不過,它們對事物的描述的準確(或者說全面)程度是不同的,而諸如此類的描述,有一個更加專業的稱謂,叫做“特徵”。OpenCV裏面,提供了一些特徵描述的API,比如,對於人臉檢測而言,它提供了haar特徵的API,行人檢測,提供了hog特徵的API,甚至,它提供了LBP紋理特徵的API。但是,這些還遠遠不夠。例如,如果你要進行字符識別,OpenCV並沒有提供字符識別所對應的特徵。這個時候,就需要你自己來編程實現了。當然,該選擇什麼特徵來描述字符呢?哪些特徵更好呢?對於這些問題,我建議你去閱讀相應的會議,期刊,雜誌,碩士、博士畢業論文(畢竟碩士、博士研究生本就該從事“研究”工作),看看別人寫的文章,自然就知道了。

        對於特徵選擇,OpenCV並沒有提供特定的函數來進行衡量。而特徵的分類能力的高低評價,有很多種分析方法,有興趣的朋友,可以閱讀"《機器學習》Tom. Mitchell(著),曾華軍(譯),機械工業出版社"這本書;

        對於分類器部分,OpenCV提供了SVM,CART,boost,bayes,bdt,ANN,這幾種常用的算法。而這些基本已經覆蓋了常用的分類器。所以,你需要做的,就是知道怎麼調用其接口,各種分類器的優點和缺點(該部分,建議閱讀“機器學習”這本書)。

        通過以上的分析,你或許已經發現,OpenCV不過是一個工具而已。或者,你可以將它理解爲幼兒園小朋友過家家玩的積木,而OpenCV中的函數,則可以理解爲一個一個的積木塊,利用所有或者部分積木塊,你可以快速的搭建起來具體的計算機視覺方面的應用(比如,字符識別,車牌識別,遺留物檢測)。想必你也已經發現,在利用OpenCV這個積木來搭建具體的計算機視覺應用的時候,真正核心的,應該是這些積木塊,如果你明白了積木塊的工作原理,那麼,是不是就可以不用這些積木塊了呢?完全正確!不過,一般部分情況下,我們不需要這麼做,因爲,OpenCV已經幫你做好了一些工作(已經幫你做好了一些積木塊,直接拿來用就是了)。但是,諸如前面提到的特徵提取模塊,很多情況下,OpenCV就無能爲力了。這個時候,你就需要翻閱計算機視覺、模式識別、機器學習領域頂級會議、期刊、雜誌上面發表的文章了。然後,根據這些文章中闡述的原理和方法,來編程實現你要的東西。實際上,也就等於搭建一個屬於你私有的積木塊。其實,OpenCV中的每一個API函數,也就是這麼來的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章