References
- opencv官方tutorial详细讲解,每一个源文件细致详述, 良心教程!网站较慢,最好先下载到本地
- 这个网站有很多很多适合学习的实战项目,有些还很高大上.接受挑战吧少年!
- Learning opencv 网站还提供了github代码
Introduction
学习需要的不仅仅是勤奋,还得讲究方法.很多人明明勤奋得把自己都感动了,可还是学不会.
就以opencv为例,如果你去请教"高手"们,他们会告诉你很多方法,诸如:
- "github上"找几个项目多看看就会了
Pardon? 你当初真的是这样子学会的吗? Are you serious?
- 推荐经典教材<Learning Opencv>
当初我就是这样上当的. 你去看看这本书有多少页! 真佩服那时的我,多强的毅力啊!
- api都是皮毛, 图像处理的基础理论才是内功!
这个我不反驳, 确实是这样的. 可是如果你不是CSEE之类的专业,没有学过<图像处理> <DSP><信号与系统>…之类的课程, 呃, 也许你的opencv学习之旅会从一元微积分开始, 一个月以后别人问你能opencv干嘛了? 你会回答"在学傅里叶变换,快了快了".
- 刚开始学习不要图快,年轻人要耐得住寂寞,要把api背后的算法弄懂,最好能够透彻理解后手写实现它,这样你才能更好得运用它.
- 好吧,道理是对的. 可是这样教导新人,真的好吗?
- 比如,opencv 自带的tutorial中的discrete_fourier_transform.cpp ,很简单几十行代码,如果你要深入分析----Fourier级数,Fourier Transform, DFT… 还有,FFT理解了吗?要不要自己实现一下? 为什么要填充?copymakeborder()的原理是什么?这样做的数学理论是什么?怎么推导出来的?.. …你的opencv之旅可能到此为止.
text
如果你是想先学会用opencv做点什么, 下面的方法也许更适合你.
其实opencv官方是自带tutorial的, 都是些人家认为的最好的入门示例,你凭什么觉得你比官方更了解opencv如何入门?
按以下步骤操作:
- 第一阶段, 照猫画虎 .
- 在你下载的opencv代码中有一个文件夹叫"sources\samples",里面是各种示例,不同文件夹下是android,java,python,cpp… 选择你的菜.
- 比如cpp文件夹下有\tutorial_code子文件夹,先从\tutorial\introduction下的几个最简单示例开始,先跑起来,对opencv有一个直观的感性的认识,在这个过程中你需要学会 1. 正确的安装opencv及相关开发环境的配置; 2. 由于文件路径等问题,编译时会出现一些错误,你需要学会解决这些问题. 3. 也许你会手痒,会尝试修改部分代码,你已经迈出了第一步, 别怕出错,有bug就debug嘛!
- baidu/google/bing, 把那些你看不懂,不知道是干嘛的代码行弄明白,第一阶段不需要太深入,知道它是干嘛的就行.
- 自己新建一个文件,按记忆尝试重写刚才学过的代码.如果你水平不高,可以只实现相同功能,不去考虑鲁棒性,可移植性,可维护性,不必纠结代码是否规范等等,实在不会的可以回过去看看tutorial是怎么写的.
<参考文献一 >有非常详细的教程!!!比如/tutorial_code\core\discrete_fourier_transform.cpp,你看不懂? 请戳这里!够详细吧?
- 第二阶段, 熟悉接口
- 从tutorial目录下选些你感兴趣的源文件, 思考: 1. 它是干什么的; 2. 分为几个步骤实现; 3. 代码实现涉及哪些模块,调用了哪些函数,参数应该怎么设置.
- 记住那些你经常看见的代码行, 比如include行里面那些文件应该在使用哪些常用函数时#include它.
- Mat是什么?都有哪些属性和方法? 诸如此类.
- 如果遇到图像处理的知识, 请了解一下相关理论, 毕竟不懂图像处理的话,你只是一个api工程师.
- 自己实现它. 看得再熟悉,你以为你掌握了? 自己实现一遍,你会发现你太高估自己了.
- 第三阶段, 实际运用
你肯定已经摩拳擦掌,想要干点什么.
这个网站有很多很多适合学习的实战项目,有些还很高大上.接受挑战吧少年!不要试图都搞定,你不行的,也没必要,选择你感兴趣的.
- 第四阶段, 自力更生
无论是搞科研还是做工程,终究要扔掉拐杖.
找一个课题,查找论文,然后实现之.- 可以是期刊论文 , 英文还是中文就看你是什么货色了. 比如<图像处理>课程的考核就是教授给出一篇英文论文,你自己想办法读懂,然后用opencv或者matlab实现.
- 当然, 如果你时间充足, 可以选择一篇硕士论文.
分享一个秘诀,一般人我不告诉ta
学习一项技能,最好的方法是报名一项考试,最好是考试费死贵死贵的那种;
入门一个领域,最好的学习资料是中文硕士论文,最好是双一流大学的那种
- 第五阶段, 呃, 到这儿,你还要别人告诉你怎么做?
以上步骤, 不一定每个阶段都得100%没问题了再进入下一个阶段,那样你会止步于某个阶段的.
敏捷开发! 快速迭代啊 ! 这些名词天天挂在嘴上,装B啊?
活学活用知道不?举一反三行不行啊?你考不上好大学是有原因的知不知道?不是你没用功!也不是"当初只是我年少无知,不努力,要是我努力的话…"
"无知"是真的,无所谓年少.