这是一个转型AI的励志故事,从非科班到拿下竞赛一等奖[转载]

本文大概描述了机器学习领域之外的人如何转行到机器学习领域内。说得很详细。

下文转载自CSDN:http://blog.csdn.net/qq_40027052/article/details/78542679?locationNum=3&fps=1


在计算机行业,关于从业人员的素质,一直都有一个朴素的认识——科班出身好过非科班,学历高的好过学历低的。大部分时候,这个看法是对的。在学校学习,有老师指点,有同学讨论,有考试压迫,有项目练手。即便不大用心的学生,几年耳濡目染下来,毕业后作为半个专业人士,还是没什么问题的。

不过,量子物理告诉我们,这个世界的本质要看概率。所以,科班出身的同学,在技术上好过非科班出身的同学,这是大概率事件;相反,非机器学习专业,甚至非计算机专业的同学,在这个领域做的比本专业同学更好,则就是小概率事件了。但小概率事件并非“不可能事件”,国内很多做机器学习公司的CTO,都不是机器学习专业的科班出身,却能够抓住这里的“小概率”,让自己华丽地转身并实现弯道超车。

他们是怎么做到的?

如果在上学的时候,我们没能嗅到机器学习领域的机会,而是选择其他领域来学习和工作……如今却打算半路出家、改行机器学习,应该怎么做,才能做到跟这些人一样好?或者,至少是足够好?

我自己痛苦转型的经历,说出来可以供大家参考一下。

我也是非科班出身,但因为工作,一直需要接触计算机视觉的一些传统算法。后来,看到ImageNet竞赛的结果,我意识到了深度学习在视觉领域的巨大优势,遂决定开始转型深度学习和神经网络,走上了这条学习的不归路(笑)。

想要转型,跟上学的时候不同,因为手头正在做的工作意味着,自己需要从没有时间的情况下挤出时间,需要把别人睡觉、打游戏的时间用来学习,而所学的又是一种颇为艰深晦涩的学问。

转型,其实很容易,需要做到的只有一件事:学习。

转型,其实很困难,因为必须做到一件事:坚持学习。

最难的不是下定决心,而是贯彻到底。所以,在开始之前,不妨先问问自己这样几个问题:

“我真的已经想清楚,要踏足这个行业吗?”
“我能够付出比其他人更多的辛苦汗水,在这条路上坚定地走下去吗?”
“在遭受了痛苦甚至打击之后,我对机器学习的热爱,仍然能够维持我继续前进吗?”

根据我掌握的数据,100个程序员里大概有30个考虑过转型,而真正付诸行动的不过10个。一个月以后仍然在坚持的仅有5个,最终能完成第一个阶段学习的,最多两三个而已。

真的这么困难吗?是的。特别是你要白天上班,晚上才能学习,独学而无友,有问题又只能自己查。而要系统地入门,又不是咬牙一天两天就能学出来,恐怕得坚持几个月才能get到点。

我个人的经历是这样:一开始接触时,每周一、三、五固定3天时间,每晚花两个小时去学习、看视频、翻书,周六周日则用来完成课程附带的编程作业,大概也是每天两小时左右。在这种强度下坚持了三个月,我才算是完成了入门的第一步。

也许有的人效率更高一些,也许有的人步子更慢一些,但快和慢不是关键,即使学习最慢的人,也要比一开始放弃学习的人走得更远。

所以,其实真正重要的,不是“我该学什么”,或者“我该怎么学”;而是“我是不是真的有足够的决心”,以及“我是不是能坚持到底”。

上手的课程

定好决心后,我们就能看看:在学机器学习的时候,我们到底在学什么?

几乎所有人都知道人工智能这个概念;有一部分人知道“机器学习”这个概念;其中一小部分人能清楚描述“深度学习”、“机器学习”和“神经网络”的关系; 很少一部分人能够正确说明“卷积”、“池化”、“CTC”这些名词的正确含义与计算/实现的方法;非常少的人能清楚地理解损失函数和反向传播的数学表达;极少极少的人能够阐述网络的一个修改(比如把卷积核改小)对precision/recall会产生什么影响;几乎没有人能描述上述影响到底是什么原理。

阅读全文

知识:元胞自动机

元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机、点格自动机、分子自动机或单元自动机)。是一时间和空间都离散的动力系统。散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新。大量元胞通过简单的相互作用而构成精态系统的演化。由冯诺依曼在20世纪50年代发明。

一开始是二维的,后来发展到三维,多维。

两张图片展示一下:

二维:

知识:元胞自动机

三维:

元胞自动机本来是研究在一定规则下元胞的演化的,而且得出了很多有价值的结论。比如参看文章:这个游戏没有玩家,为何在学术圈火了半个世纪?

今天还了解到,元胞自动机已经被使用到各个方面。我关心的是在物理学中的应用。

百度百科介绍到:“除了格子气元胞自动机在流体力学上的成功应用。元胞自动机还应用于磁场、电场等场的模拟,以及热扩散、热传导和机械波的模拟。另外。元胞自动机还用来模拟雪花等枝晶的形成。”

还有一个文章详细讲解了元胞自动机,很生动:http://www.swarma.org/complex/models/ca/ca1.htm

有人给出了二维元胞自动机的一个C++开源例子,原文链接:访问。我分享一下运行视频:

 

我在arXiv.cn上搜索得到的结果:https://arxiv.org/find/all/1/all:%20AND%20Cellular%20Automaton/0/1/0/all/0/1?client_host=cn.arxiv.org

有几个我很有兴趣:

1. Von Neumann Regular Cellular Automata  arXiv:1701.02692

2. Morphognosis: the shape of knowledge in space and time  arXiv:1701.02272

3. Neighborhood-History Quantum Walk  arXiv:1611.07495

4. Quantum cellular automata and free quantum field theory  arXiv:1608.02004

5. Particle models with self sustained current  arXiv:1606.04920

6. Neighborhood approximations for non-linear voter models  arXiv:1604.07778

知乎上有个问题:物理专业自学计算机应该学些什么?

题目大概是说他物理本科大四了,申请去美国读物理博士,但自己对计算机有很大兴趣,为了考虑以后的饭碗,想自学计算机。自己对计算机图形学有兴趣,希望得到一些建议。

回答的人不少,有几个人的回答震撼到我了。


第一个回答:

作者:陈然
链接:https://www.zhihu.com/question/23212279/answer/24061341
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

个人站的角度不同,现在的答案基本都是从图形学的角度建议,我换个角度。

从研究生计算机科学做研究的角度来讲,我认为本科最适合的专业首先是物理,其次是数学,再次才是计算机。数学学的太抽象,抽象层次太高,研究现实问题的人往往处在鄙视链的底端。计算机学的太底层,对于概率论、随机过程、线性代数等学科学的太少,不了解建模分析的那套方法论。而物理学一方面的数学知识足够多,另外一方面主要研究的方法也是对这个世界建模,然后进行观测,这与前沿的机器学习领域做的事情几乎是一样的。至于会不会写代码,其实科研里面要写的代码不多,主要都是在推公式,研究如何设计模型使得其拥有很多良好的性质。代码很多时候写写matlab就可以了。

所以恭喜你,如果你想转行做CS的科研,你有很大的优势。事实上,很多CS领域的大神都是学物理的,比如华人图灵奖得主姚期智,CMU Machine Learning领域大神Alex Smola。

如果你真的励志做CS相关的研究的话,物理PhD的选择最好到CS极好的学校,比如UCB, CMU, MIT, Stanford,一般这些学校都可以辅修Machine Learning的Master, 多修CS相关的课程,都是很好的选择。Coursera上的Machine Learning课程都很入门,如果想进阶,你可以看看CMU 10701(Machine Learning), 10702(Statistical Machine Learning), 10708(Probabilitic Graphic Model) 课程的课件、视频、相关阅读和作业,基本都不需要写代码,主要是数学证明、建模和分析。

当然,如果你想做应用而不是做理论什么的,当我以上没说。


第二个回答:

作者:Milo Yip
链接:https://www.zhihu.com/question/23212279/answer/23940891
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

其实在计算机图形学里有很多与物理相关的课题,例如物理模拟(刚体、柔体、流体等)、基于物理的渲染(光源、材质、媒介等),还有一些涉及物理的跨学科课题,例如生物力学、基于物理的声音渲染、光场摄影等等。简单介绍几本书

有空可以看看最前沿的图形学发展,特别是当中涉及物理部分的

看看那些文献的作者网站,可能会发现不少研究者都有物理背景。

我觉得能做理论物理研究的人,其智商做哪种科学问题也不大吧。而计算机科学之本就是算法,无论是哪一个应用方向都是必须的,建议深入学习。个人不建议浪费时间在API、OS、UI编程上面,不竟这些东西许多人都能做,有研究能力的人可以探索新世界。因为游戏、动画、电影这些娱乐工业,计算机图形学的职位在行业上也有需求。


第三个回答:

作者:徐枭涵
链接:https://www.zhihu.com/question/23212279/answer/27455609
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

我是理论物理大二的…给师兄回答这个问题吧。
================================================
当师兄看到很多API繁杂但无从下手,答案是唯一的:多写。
再说说我的建议吧,
掌握一门快速开发语言:强力推荐Python,因为有scipy和numpy存在。可以把这玩意当Matlab用。我做过测试,进行大矩阵乘法numpy的速度比matlab快50%,这二者都比mathematica快20倍…而且python有一个很好的web framework django,结合html css,可以写出不错的网站(比如知乎)如果你是OI的,数据结构神马不用太多虑,直接上计算机图形学吧。
建议可以OpenGL+PhysX(物理引擎)+.NET/Cocoa(win/mac)一起做一个项目,像我做的是一个无人机控制的仿真平台。这个对于学习三这玩意都有效。特别是mvc的构建方式。
另外还有一个很轻巧的构建计算机图形学的方式是webgl,很漂亮。或者直接unity3d(游戏引擎)引擎亦可。
如果你会了html也就是如果你会了javascript,建议入手node-webkit,二十分钟构建一个跨平台桌面应用。对于交互UI我比较倾向于两种,一个是轻量级的html+js的形式,好看简单,一个是unity虚拟现实,我最近做的一个项目就是这两种结合的模式。强力推荐CUDA(GPU计算),物理口必备…想在自己的PC上模拟核聚变CUDA绝对是居家旅行,杀人放火必选。而且CUDA的模型天生是为物理学家设计的。同时需要学点cpp,可以把鄙校丁泽军老师计算物理A书上的习题全部CUDA一遍基本就练习的差不多了
micro.ustc.edu.cnML/DataMining我只看过一些些,这些东西如果自己写算法的话需要用c/cpp如果只是玩玩可以用python+一堆库的方式来搞。主要可能还是数据源吧。嵌入式&单片机,如果不慎入实验物理坑会点单片机嵌入式还是有必要的,入个树莓派玩玩ROS吧。从树莓派+arduino玩的方式入手玩起来很简单无压力,最练手的就是写机器人控制了。这个是从机械折腾到前段的。
树莓派既是典型的嵌入式Arm开发版,优势在于社区庞大。
arduino是一种高度简化后的单片机。比起51等用起来真的简单多了

移动开发:学习学习swift吧。玩玩iOS。。总是觉得Android怪怪的

学习轨迹:
1.熟练使用linux/unix(格式化硬盘一个月内可以生存)
2.选一个自己顺手的IDE(vim/emacs/VS),基本熟练cpp、python(均指一万行代码,可以写写计算物理习题)
3.搭建一个自己的服务器(using aws.amazon.com ec2)
4.写一个桌面app .net/cocoa,(学c#/o-c),在这里折腾OpenGL CUDA等
5.写一个绚烂的个人网站use Django&html5&css3&webgl
6.研究妹子回你短信速度和她对你好感度的关系(使用支持向量机/deep learning)
7.学习CUDA并在你的pc上模拟EAST using MHD model in FEA
(其实能跑出来一个N-S方程出来个卡门涡街就很好了)
8.学习单片机并且控制一架四轴飞行器给那个追了四年没追的女神泼一盆冷水(someone你丫两年以后给我等着)。
可以适当从ROS+树莓派入手,加上一些有意思的硬件比如kinect什么的,就很好玩,推荐学习OpenCV(人脸识别)+讯飞各种接口(语音)。

对了。。。工程控制论,或者什么ML,DataMining的数学比物理口的数学真的是弱爆了。一群不用解偏微分方程的渣渣。

顺便抛我的blog stlover.org(呃最近好像数据库挂了)
就这些差不多了…剩下做点小项目自己也就会了
=====================
操作系统建议看看,就是看看而已。。我大二选了操作系统课最后发现完全没听。
编译原理没有必要,想深入学推荐MIT的计算机结构和解释同时学习LISP


第四个回答:

作者:Joe Physwf
链接:https://www.zhihu.com/question/23212279/answer/102771418
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
如果读完PhD在转计算机,真真是浪费了。计算机对高等物理那些基本不需要,倒是数学是很需要的,但PhD依然是浪费。
那些图形学,虽然涉及到物理,但是最多也是本科就够了,图形学的很多东西都是在投机取巧,那些有颠覆的理论基本上根物理无关,细节的东西都是在拼奇技淫巧。不是不懂物理,而是上帝的高度凡人根本无法企及。你想两面镜子相互反射这种东西,在计算机看来就是无限循环(卡死),但是上帝那里却是realtime的,一点都不卡。
其他很多计算机领域跟物理就更加没有关系了,互联网,大数据,人工智能都没有。如果你对两者都割舍不了的话,那你应该关注计算机基本理论这些东西。你对软硬件结合很感兴趣,但是这些难度不大,而且你一旦了解之后估计很快就失去兴趣了,因为很容易理解掌握。真正难的是计算机物理基础层面的东西,那才是真正软硬结合的地方。半个多世纪之前,贝尔实验室发明了三极管,现在半导体技术已经日渐迟缓了,量子计算机,量子传输这些技术充满想象。当然未来很难说,但发言权在于那些位于基础理论前沿的那些人,很明显你有机会。实用技术有时的确很吸引人,但那些都是细致末节,你穷尽一生改变的只是一枝一叶,并且或早或晚都将坠落。

我的感悟:

第一个回答站在常春藤留学生的视角给出了实用的建议。给我的感觉就是,国外的课程比国内大学的课程领先了太多了,似乎这些课程已经完全成熟和系统化了,而国内还比较杂,很多人还必须去看网络课程来学习。这从一个侧面能看出,国内学生相比国外学生这方面受教育的深度和看问题的视野是有差距的,而且这样网络封闭的话,很不好弥补。

第二个回答罗列了不少书籍,都是物理和游戏、计算等相关的计算机书籍。这类书籍国内也越来越多,不过不得不说的是,大多好的教材,似乎都是外国人写的,中国引入翻译版(书的好坏甚至还要取决于译者的水准)。也就是说,好的教材都是英文的,大家最好学好英文,方便自己掌握知识。这也提醒我们,我们与他们的差距还是很大的。

第三个回答深深震撼到我了。一个大二学生,已经对计算机技术掌握了这么多,真是不简单啊。我感觉他做的事情如果让我去做,没有几年是做不完的。其中他讲到了Python、C#编程,js编程、html、css、javascript(也许他还会java呢),swift,用到了U3D,还会使用SUDA,也玩开源硬件,arm编程,而且非常擅长Python(用Python结合其他框架做了网站,做了GUI编程等)。学习MachineLearning(机器学习)、DataMining(数据挖掘),还会OpenCV、讯飞API。这个答案是答主在2年前回答的,估计现在已经用到了Google、百度的接口(语音接口还是很强大的),做模式识别,可能还有很多我根本没有听过的,也不知道存在的技术。我非常佩服他,

第四个回答比较理性。他简单澄清了物理和计算机的关系,并建议去做最基本的事情。题主感谢了他,而且题主已经走上了计算物理的道路。“我现在业余时间主要关心机器学习方面的东西,因为背后的数学支持挺对我胃口。我自己的科研方向也正是量子计算,我还在尝试涉猎量子计算+机器学习的交叉。”题主这样回答。


我摘下眼镜,停下来想了想。

普通大众忙忙碌碌,做的事情对他们来说可能过于简单了。世界上就是有这么一小部分人,走在人类发展的前列。虽然和大家一样一日三餐,闲了也玩耍逗乐,但静下来的时候,很多人选择看电视打牌睡觉娱乐,而他们选择去钻研他们的兴趣。

上面的只是物理和计算机的话题。其实,无论是摄影,研究昆虫,或者是别的什么,只要是钻进兴趣里了,人生不会太枯燥,追求也就不会太乏味。我不想说谁的生活更有意义,至少,这么些人的其中一些人做的事,会影响很多人。我感觉,他们活着的意义更大一些吧。

仿照 OpenCV 中文官方网站上VC2010安装OpenCV2.4.4的教程安装,该教程地址为 VC 2010下安装OpenCV2.4.4

我的环境和教程中的不一样,先说说教程中的搭建环境:

VC2010

windows 32位操作系统,即x86

opencv2.4.4

我的环境:

VC2012

windows 8.1 64位中文版操作系统,即x64

opencv2.8.2 (最新版)

根据你的CPU位数,按照教程中的方法安装即可。我的是64位,则在选择的时候,x86就换成x64 。另外,将教程中的vc10换成vc12 。

这里有一个值得强调的问题,教程中没有明确说明。按照教程的方法安装好,然后建立测试程序,运行后提示多行类似下面语句的错误:

后来发现,这是我的配置错误,对64位操作系统的配置还没有完成。还需要修改的地方是:

生成–>配置管理器–>活动解决方案平台–>新建–>x64  如下图:

新建好之后,在属性管理器中就能看到多出来了Debug|x64和Release|x64,如下图:

在“属性管理器”中,对Debug|x64或Release|x64的Micro.Cpp.x64.user仿照x86进行设置,但是注意替换VC++目录中的x86为x64,还要记得在“连接器–>输入”中包含库。

需要强调的是,对于Debug|x86或Release|x86的Micro.Cpp.x86.user的设置,请和教程中的保持一致,不是x64,就是x86 。

即,在Debug|x86或Release|x86下就设置x86的,在Debug|x64或Release|x64下才需要设置x64的,分开对待。如下图

我列出VC2012中的opencv\build\x64\vc12\库

x64中要包含的目录:

其他错误的处理方法:

错误1: fatal error C1083: 无法打开包括文件:“opencv2\opencv.hpp”: No such file or …

表示的意思是找不到opencv.hpp,这是在VC++目录中设置的,即在下图中设置,教程中已经说明了。

错误2:找不到msvcr120.dll、msvcp120.dll

表明系统缺少该dll文件,可以在网上搜索下载,然后安装。安装dll文件时注意以下区别:

安装dll,就把dll文件直接拷贝该文件到系统目录里,但是不同系统拷贝的目录是不同的:
1、Windows 95/98/Me系统,将msvcp120.dll复制到C:\Windows\System目录下。
2、Windows NT/2000系统,将msvcp120.dll复制到C:\WINNT\System32目录下。
3、Windows XP/WIN7/Vista系统,将msvcp120.dll复制到C:\Windows\System32目录下。
如果您的系统是64位的请将文件复制到C:\Windows\SysWOW64目录
然后打开”开始-运行-输入regsvr32 ***.dll”,回车即可解决。或者打开cmd(命令提示符)输入刚才的语句即可,***.dll表示你刚才拷贝进去的dll文件。

我出现的就是以上几个错误,都排除了。然后就成功运行了,搭建完成。

测试代码如下:

注意,请将lena.jpg放到项目目录中的同名子目录中,如下图所示:

运行效果图:

代码:(代码转载自:http://ubaa.net/shared/processing/opencv/blob.html

[cc lang=”c”]
import hypermedia.video.*;

OpenCV opencv;

void setup() {

size( 640, 480 );

// open video stream
opencv = new OpenCV( this );
opencv.capture( 640, 480 );

}

void draw() {

background(192);

opencv.read(); // grab frame from camera
opencv.threshold(80); // set black & white threshold

// find blobs
Blob[] blobs = opencv.blobs( 10, width*height/2, 100, true, OpenCV.MAX_VERTICES*4 );

// draw blob results
for( int i=0; i

我们可以在 http://ubaa.net/shared/processing/opencv/ 找到 OpenCV Processing and Java Library。

我提供的下载地址: http://yunpan.cn/Q9yQsLF8HjZSc (附带高清版视频操作演示)

网站说明如下

This implementation is not a complete port of OpenCV. Currently, this library supports :

  • real-time capture
  • video file import
  • basic image treatment (brightness, contrast, threshold, …)
  • object detection (face, body, …)
  • blob detection

Future versions will include more advanced functions such as motion analysis, object and color tracking, multiple OpenCV object instances …

For more information about OpenCV visit the Open Source Computer Vision Library Intel webpage, the OpenCV Library Wiki, and the OpenCV Reference Manual (pdf).

由于是国外网站,有些朋友可能打不开,现提供我备份的下载地址: http://yunpan.cn/Q9yQsLF8HjZSc

 另外,最新的库下载地址在这里:https://github.com/atduskgreg/opencv-processing/releases

安装方法:

Installation instructions

1.Begin by downloading and installing the implementation of OpenCV appropriate to your platform:

  • For Windows, download the OpenCV release version 1.0 (not the 1.1pre1) package and follow the instructions of the installer. notes: be sure to select the additional tasks ‘Add ….OpenCV bin to system PATH’ during installation (or you need to add the rigth path by yourself later) and reboot your machine.

  • For MacOS X, dowload the opencv-framework-1.1.dmg image and install the package by following instructions of the installer

 

  • For Linux users, if your distribution doesn’t propose packages in your favorite Package Manager tool, download the latest opencv-*.tar.gz archive and compile/install the source files as describe in the Linux install guide.

2.Download, unzip, and move the OpenCV Processing Library into your Processing libraries folder, or for Java users copy the content of the library folder in one of your Java Extensions folder.

DUE TO AN ERROR WHILE PACKAGING THE ZIP FILE, THIS VERSION UPDATED SHOULD SOLVE THE WINDOWS PROBLEM ABOUT DLL DEPENDENCIES AND OPENCV 1.0

在 Windows 中安装 OpenCV Processing Library
在 Mac 中安装 OpenCV Processing Library

3.Optionally, you can download these OpenCV Processing examples or, for pure Java users, these OpenCV Java samples.

4.Previous library version can be downloaded here

视频操作演示

PS:下载地址中包括了视频的高清版,可以下载查看。

 

Documentation

  • See the What’s New document for all new implementation or for some of the most important changes
  • Processing documentation … 🙂 start with this page (also include in the OpenCV Processing Library zip archive)
  • For Java users, the Javadoc reference for this project (online only). For offline documentation dowload the OpenCV Java Library API

Credits

The OpenCV Processing Library is a project of the Atelier hypermédia at the École Supérieure d’Art d’Aix-en-Provence. It is maintained by Stéphane Cousot and Douglas Edric Stanley. Special thanks to the openframeworks community for support and the C++ Binary Quicksort method.

OpenCV

The main object for all computer vision processes.

An example(举例): the usage of the first one (OpenCV)

Name OpenCV
Examples
Description The main object for all computer vision processes.
Syntax OpenCV(parent);
Fields
BILATERAL Blur method
BLUR Blur method
BUFFER Type of Image
CASCADE_FRONTALFACE_ALT Standard Haar classifier cascade file used for object detection
CASCADE_FRONTALFACE_ALT2 Standard Haar classifier cascade file used for object detection
CASCADE_FRONTALFACE_ALT_TREE Standard Haar classifier cascade file used for object detection
CASCADE_FRONTALFACE_DEFAULT Standard Haar classifier cascade file used for object detection
CASCADE_FULLBODY Standard Haar classifier cascade file used for object detection
CASCADE_LOWERBODY Standard Haar classifier cascade file used for object detection
CASCADE_PROFILEFACE Standard Haar classifier cascade file used for object detection
CASCADE_UPPERBODY Standard Haar classifier cascade file used for object detection
FLIP_BOTH Flip mode
FLIP_HORIZONTAL Flip mode
FLIP_VERTICAL Flip mode
GAUSSIAN Blur method
GRAY Colorspace of image
HAAR_DO_CANNY_PRUNING Haar classifier flag
HAAR_DO_ROUGH_SEARCH Haar classifier flag
HAAR_FIND_BIGGEST_OBJECT Haar classifier flag
HAAR_SCALE_IMAGE Haar classifier flag
INTER_AREA Interpolation method
INTER_CUBIC Interpolation method
INTER_LINEAR Interpolation method
INTER_NN Interpolation method
MAX_VERTICES The maximum number of contour points available to blob detection (by default)
MEDIAN Blur method
MEMORY Type of Image
MOVIE_FRAMES Movie info selector (not yet implemented)
MOVIE_MILLISECONDS Movie info selector (not yet implemented)
MOVIE_RATIO Movie info selector (not yet implemented)
RGB Colorspace of image
SOURCE Type of Image
THRESH_BINARY Thresholding method
THRESH_BINARY_INV Thresholding method
THRESH_OTSU Thresholding method
THRESH_TOZERO Thresholding method
THRESH_TOZERO_INV Thresholding method
THRESH_TRUNC Thresholding method
height OpenCV image/buffer height
width OpenCV image/buffer width
Methods
ROI() Set image region of interest to the given rectangle.
absDiff() Calculate the absolute difference between the image in memory and the current image.
allocate() Allocate required buffer with the given size.
blobs() Blob and contour detection.
blur() Smooth the image in one of several ways.
brightness() Adjust the image brightness with the specified value (in range of -128 to 128).
capture() Allocate and initialize resources for reading a video stream from a camera.
cascade() Load into memory the descriptor file for a trained cascade classifier.
contrast() Adjust the image contrast with the specified value (in range of -128 to 128).
convert() Convert the current image from one colorspace to another.
copy() Copy the image (or a part of it) into the current OpenCV buffer (or a part of it).
detect() Detect object(s) in the current image depending on the current cascade description.
flip() Flip the current image around vertical, horizontal or both axes.
image() Return the current (or specified) OpenCV image
interpolation() Set global interpolation method.
invert() Invert image.
jump() Jump to a specified movie frame.
loadImage() Load an image from the specified file.
movie() Allocate and initialize resources for reading a video file from the specified file name.
pixels() Retrieve cuurent (or specified) image data.
read() Grab a new frame from the input camera or a movie file.
remember() Place the image (original or current) in memory.
restore() Revert to the original image.
stop() Stop OpenCV process.
threshold() Apply fixed-level threshold to the current image.
Usage Application
Related

维基百科介绍(全面,可以找到关于OpenCV的各个链接)

OpenCV 2.4.3 documentation

OpenCV DevZone

ChangeLog(新版本的修改日志)

一本新书:

Mastering OpenCV with Practical Computer Vision Projects

  • Detailed tutorials & full-source code for 9 projects (Augmented Reality, SfM, OCR, AAM & POSIT, 2D & 3D Face Tracking, Face Recognition, Kinect, Mobile), using C++ version of OpenCV 2.4.2 or newer.

  • Latest code is available at https://github.com/MasteringOpenCV/code

  • Mastering OpenCV

  • (Assumes you already know how to use OpenCV, such as by reading the 2 books above).

现在OpenCV版本已经更新到了2.3.2(由OpenCV.org.cn得到),有传言已经到了2.4.2(可到新浪爱问共享资料下载到OpenCV-2.4.2.part1,2,3,4,5,搜索便有了),而旧的书,比如Learning OpenCV第一版和yushiqi的书都是基于OpenCV1.x,几乎已经不能拿来使用了。

这本好书叫做:《OpenCV 2 Computer Vision Application Programming Cookbook》

电子书下载地址: OpenCV.2.Computer.Vision.Application.Programming.Cookbook.pdf

另外一本书找不到电子版,这里是google的图书介绍:

Learning OpenCV:Computer Vision in C++ with the OpenCV Library

封面