写这个系列的文章,主要的动机很简单,就是想找一个在windows下较方便的开发环境,借助于opencv来学习数字图像处理的知识。
上面那短短一句话中,出现了windows, opencv, 数字图像处理这三个关键词,这就要求我们需要熟悉windows编程,c++, 以及数字图像处理的一些基本原理,对于很多初学者来说,windows编程和C++往往是两大拦路虎,很多人都知道学习数字图像处理一定需要实战,但实战的第一步怎么迈出,该选择哪种学习方案,往往颇为纠结。
【学习数字图像处理的几种方案 】
目前有很多学习数字图像处理的方案,总结了一下,大概有如下几种
1. matlab
2. python + numpy +scipy+matplotlib
3. linux + gcc + opencv
4. windows下vs + opencv + 控制台程序
其中1是学校里比较主流的方式,优点是不需要懂c语言和c++,只需要专注于相关算法的实现,缺点也很明显,以后想做dev的同学可能就得不到锻炼,对学习软件开发和程序设计没有太多好处。
python是最近比较流行的学习数字图像的一种选择,和matlab相比最大的优势在于,python是开源的,安装包很小,而且python作为程序语言本身就很优秀,通过python学习数字图像处理,既能掌握数字图像的原理,也能掌握一门实用的编程语言。
不过学习python还是稍微有点曲线了(和matlab相比),它不像matlab那样,模块齐全,他需要你像搭积木一样寻找各种python的库,结合使用才能发挥最大作用,而且python的调试可能也没有matlab方便,不习惯编程的同学可能会比较抵制这种方案。
如果要使用c或c++呢?一种方案是在linux下开发,这种方式其实是最简单的,只需要gcc一行命令,编译链接Opencv就完了,如果你想学c++,又不想折腾windows下复杂的visual studio,那么用linux是最好的。
最后,如果你是一个windows程序员,想借学习数字图像处理这个机会学一学c++和windows编程,那么在windows下就必须要用visual studio了。
【windows下如何学习数字图像处理】
1. 使用DIB格式的位图进行处理
这个是现在市面上流行的“VC和数字图像处理”之类的方案,它有很大的局限性:
1. 大量使用windows api,比如解析DIB格式的图片, 往往是几十行让人头大的C风格的代码,初学者在接触到数字图像处理的真正内容时,往往会被这种技术细节吓跑。
2. 有一些和数字图像处理没有太多关系的内容,比如调色板,也会让初学者感到图像格式的复杂。
3. 只能处理bmp, 对于最流行的jpeg,没有办法处理,更不要说png了
4. 很多算法只能处理灰度图,对于更为流行的彩色图像一般都当灰度图处理
5. 过分地炫弄windows界面的一些技巧
2. 使用opencv
这种方案比第一种好不少,至少它可以解码jpeg。但现在市面上这方面的书还比较少 ,而且更多地是在控制台程序下进行了,即便有UI,也是很简单地利用Opencv自带的窗口系统,其实并不是很好,也不太方便。
3. 在mfc的框架下使用opencv
这种方案其实是比较灵活的,对于windows程序员来说,不管怎么样,mfc和windows编程还是必须要掌握的技能,在以后的文章中,我会介绍在mfc框架下如何使用opencv。