opencv 快速上手

References

  1. opencv官方tutorial详细讲解,每一个源文件细致详述, 良心教程!网站较慢,最好先下载到本地
  2. 这个网站有很多很多适合学习的实战项目,有些还很高大上.接受挑战吧少年!
  3. 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如何入门?

按以下步骤操作:

  1. 第一阶段, 照猫画虎 .
    1. 在你下载的opencv代码中有一个文件夹叫"sources\samples",里面是各种示例,不同文件夹下是android,java,python,cpp… 选择你的菜.
    2. 比如cpp文件夹下有\tutorial_code子文件夹,先从\tutorial\introduction下的几个最简单示例开始,先跑起来,对opencv有一个直观的感性的认识,在这个过程中你需要学会 1. 正确的安装opencv及相关开发环境的配置; 2. 由于文件路径等问题,编译时会出现一些错误,你需要学会解决这些问题. 3. 也许你会手痒,会尝试修改部分代码,你已经迈出了第一步, 别怕出错,有bug就debug嘛!
    3. baidu/google/bing, 把那些你看不懂,不知道是干嘛的代码行弄明白,第一阶段不需要太深入,知道它是干嘛的就行.
    4. 自己新建一个文件,按记忆尝试重写刚才学过的代码.如果你水平不高,可以只实现相同功能,不去考虑鲁棒性,可移植性,可维护性,不必纠结代码是否规范等等,实在不会的可以回过去看看tutorial是怎么写的.
      <参考文献一 >有非常详细的教程!!!比如/tutorial_code\core\discrete_fourier_transform.cpp,你看不懂? 请戳这里!够详细吧?
  2. 第二阶段, 熟悉接口
    1. 从tutorial目录下选些你感兴趣的源文件, 思考: 1. 它是干什么的; 2. 分为几个步骤实现; 3. 代码实现涉及哪些模块,调用了哪些函数,参数应该怎么设置.
    2. 记住那些你经常看见的代码行, 比如include行里面那些文件应该在使用哪些常用函数时#include它.
    3. Mat是什么?都有哪些属性和方法? 诸如此类.
    4. 如果遇到图像处理的知识, 请了解一下相关理论, 毕竟不懂图像处理的话,你只是一个api工程师.
    5. 自己实现它. 看得再熟悉,你以为你掌握了? 自己实现一遍,你会发现你太高估自己了.
  3. 第三阶段, 实际运用
    你肯定已经摩拳擦掌,想要干点什么.
    这个网站有很多很多适合学习的实战项目,有些还很高大上.接受挑战吧少年!

    不要试图都搞定,你不行的,也没必要,选择你感兴趣的.

  4. 第四阶段, 自力更生
    无论是搞科研还是做工程,终究要扔掉拐杖.
    找一个课题,查找论文,然后实现之.
    • 可以是期刊论文 , 英文还是中文就看你是什么货色了. 比如<图像处理>课程的考核就是教授给出一篇英文论文,你自己想办法读懂,然后用opencv或者matlab实现.
    • 当然, 如果你时间充足, 可以选择一篇硕士论文.
      分享一个秘诀,一般人我不告诉ta
      学习一项技能,最好的方法是报名一项考试,最好是考试费死贵死贵的那种;
      入门一个领域,最好的学习资料是中文硕士论文,最好是双一流大学的那种
  5. 第五阶段, 呃, 到这儿,你还要别人告诉你怎么做?

以上步骤, 不一定每个阶段都得100%没问题了再进入下一个阶段,那样你会止步于某个阶段的.

敏捷开发! 快速迭代啊 ! 这些名词天天挂在嘴上,装B啊?

活学活用知道不?举一反三行不行啊?你考不上好大学是有原因的知不知道?不是你没用功!也不是"当初只是我年少无知,不努力,要是我努力的话…"

"无知"是真的,无所谓年少.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值