opencv 學習方法


1、 學習方法:

http://www.opencv.org.cn/forum.php?mod=viewthread&tid=7055&extra=&page=1

首先還是說說如何學Opencv吧,記得最開始進實驗室的時候師兄讓看Opencv,當時的學術基礎很差,編程能力也很一般,所以學Opencv時感到很無助,像是陷入了一個死循環。想通過算法看代碼,發現算法不會;通過代碼學算法,又發現自己讀代碼的能力很弱。后來通過不斷的讀文章(下面會推薦幾篇文章供算法入門)和加強實際的編程能力,其實就是通過Opencv把一些經典的算法實現,來學習。慢慢的就會發現,Opencv和matlab一樣好用。不過,Opencv是C/C++混合+模板編程+N多指針,看代碼的確很費勁(很多模板類的代碼和函數指針的調用函數我到現在還是沒怎么看明白)。慢慢來就好,讀代碼讀的多了,會有三個好處:1,更深入和實際的了解算法,深入的了解算法是指通過看代碼可以獲得算法在實際實踐的時候很多細節方面的工作是如何做的,實際是指算法本身在實現的時候會有一些小的竅門,有的算法的實踐並不是完完全全將算法翻譯過來的,編程實現的時候有實踐的一些小竅門。2,Opencv中有很多沒有被列到文檔里的很實用的代碼(很多函數都是_icv開頭是,其實很值得一看)。3,發現Opencv的bug,及時的修正保證自己程序的健壯。我的Opencv和剛安裝的已經有很大的區別了,就是偶爾發現某處的一些問題,然后修改了,再直接編譯。不過我沒有注意存記錄,弄的現在都不知道什么地方改過。

最近有很多同學問我關於那幾個東西有沒有比較好的文章和代碼,我在這里總結一下,以便大家使用(所列文章google下就能得到):
1, 背景建模,用opencv的吧,不過代碼比較難度,而且效果也一般,練練手吧,從讀代碼開始,然后嘗試用自己寫一個。
文章: Stauffer, Chris and Grimson, W. E. L. "Adaptive background mixture models for real-time tracking", Computer Vision and Pattern Recognition 1999
2,meanshift做跟蹤,opencv有源代碼,google下“meanshift tracking”
3,同上,google之
4,《計算機視覺--一種現代方法》
5,Kalman filter:

http://en.wikipedia.org/wiki/Kalman_filter

matlab toolbox: <!-- m --><a class=\"postlink\" href=\"http://www.cs.ubc.ca/~murphyk/Software/Kalman/kalman.html\">http://www.cs.ubc.ca/~murphyk/Software/ ... alman.html</a><!-- m -->
6,opencv論壇視覺算法與理論板塊有代碼
文章:David Lowe的主頁:

http://www.cs.ubc.ca/~lowe/

首先先推薦幾篇供大家學習Opencv的文章吧,這些文章是一些經典的算法,它們在Opencv上已經有了具體的實踐。這些算法原理比較簡單,可以用來作為學習Opencv的算法(通過算法學代碼)。這里所說的讀代碼是要深入函數的內部,了解代碼運行的步驟,而不僅僅是會用個別函數:
1,Adaptive background mixture models for real-time tracking ---> 對應Opencv代碼:CvGaussBGModel等。
2,Computer vision face tracking as a component of a perceptual user interface ---> cvCamShift等。
3,EM cluster --->CvEM 這個算法很簡單,網上到處都有算法介紹。
4,計算機視覺那本書  ---> cvFindHomography, 根據多對點計算圖像的投影變換矩陣。計算機標定和三維重建經常用到。
5,An Introduction To the Kalman Filter ---> CvKalman等
6,SIFT ---> Opencv算法版置頂里Rob Hess的SIFT代碼,很值得一看,個人感覺非常好的SIFT代碼。
先寫這么多,把這些算法的Opencv實現完全看懂了Opencv大體上就沒問題了。

作為計算機視覺的開源庫,OpenCV強大而實用,下面分享一下我學OpenCV的經驗。

剛開始是由於大學生創新項目的原因,在大二的時候就開始接觸,當時我已經有了C++和Java的基礎了。不過先聲明一下,兩種語言我都學得不怎么樣,囧~既然你想學C++版的OpenCV的API,那就要掌握C++的基礎知識,特別是類、繼承方面的基本原理,當然要求不是很高,理解就行。我說有Java基礎,不是讓你學Java,而是掌握一種查API手冊的習慣和能力,就是,遇到不懂的類或函數(方法),通過查手冊了解。我的這種能力是從Java課上學到的,故在這里贅述。

拿到的第一本書叫《學習OpenCV(中文版)》,這本書是C語言版的,比較經典了。說實話,個人覺得對我的幫助不是很大。除了讓我學會了讀取圖像和視頻,還有知道一些圖像處理的函數之外,其他倒沒有什么。不過里面的原理倒是介紹的不錯,不過對於初學者來說,可能效果不是那么好。因為里面涉及的東西太多,感覺吸收有壓力。

上面是C語言版的,學着不方便。關於C++版的學習,經過摸索,強烈建議到OpenCV中文網站http://www.opencv.org.cn/學習OpenCV。這個網站有個“中文教程”子模塊(http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html),跟着這個教程,一步步的學,基礎就可以打牢了。這個教程很好,從安裝OpenCV到各個模塊的學習,都有簡明扼要的講解和例子源代碼(很多可以從OpenCV自帶例程中找到)。有些函數如果不熟悉,可以到“中文文檔”子模塊(http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html)去查。當然,你可以在論壇上注冊個帳號,和別人交流等等。推薦一本書《OpenCV2計算機視覺編程手冊》張靜,科學出版社。(opencv2主要是針對C++版的)

總的來說,學習OpenCV的時候,切忌一下幾點:

  1. 有一定的C++基礎,會查閱API手冊;

  2. 學會安裝配置開發環境;

  3. 針對各個模塊學,核心模塊必學(特別是矩陣處理),基礎的圖像處理也要學,其他結合項目學;

  4. 邊學邊動手,一定要敲代碼,看例程;

  5. 遇到問題,查手冊,上論壇,網上找資源。。。

好吧,只能幫你到這兒了,祝你成功~:)(P.S.夜深了,這可是我一個字一個字敲的,嗚嗚~)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM