opencv 學習方法

一、 學習方法: php

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

首先仍是說說如何學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的主頁: post

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的經驗。 google

剛開始是因爲大學生創新項目的緣由,在大二的時候就開始接觸,當時我已經有了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.夜深了,這但是我一個字一個字敲的,嗚嗚~)

相關文章
相關標籤/搜索