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.夜深了,这但是我一个字一个字敲的,呜呜~)

相关文章
相关标签/搜索