目前在图像处理中有两种最重要的语言:c/c++和matlab。
它们各有优点:c/c++比较适合大型的工程,效率较高,而且容易转成硬件语言,是工业界的默认语言之一。而matlab实现起来比较方便,适用于算法的快速验证,而且matlab有成熟的工具箱可以使用,比如图像处理工具箱,信号处理工具箱。它们有一个共同的特点:开源的资源非常多。在学术界matlab使用的非常多,很多作者给出的源代码都是matlab版本。最近由于OpenCV的兴起和不断完善,c/c++在图像处理中的作用越来越大。总的来说,c/c++和matlab都必须掌握,最好是精通,当然侧重在c/c++上对找工作会有很大帮助。
计算机视觉/图像算法/模式识别 工程师们使用的主流编程语言
1) 重中之重:编程语言之C/C++
公司面试除了考查应聘者的图像处理基础知识、思维逻辑和个人品性之外,在个人能力之中最重要的一条就是C/C 的功底,很多学生朋友们在学校求学阶段并不重视C/C++的学习,导致找工作时处处碰壁(不过对于来参加面试的朋友,如果有较强的逻辑思维或图像理论功底,即使C/C++ 功底弱些,企业还是会偏爱的,毕竟C/C++ 只是一个工具,只要给些时间去钻研还是可以调高的,但是逻辑思维能力和图像理论功底却不是短时期就能提高的。不过一般逻辑思维和图像理论比较强的人,其C/C 水平也是不错的)。
为啥要这么重视C/C++ 呢?答案很简单,与绝大多数其它开发语言相比:C/C++ 的应用领域无法被超越、程序运行效率无法匹敌(当然汇编语言除外),是使用人数最多、跨平台最广的语言工具(适用于windows/linux/dsp/arm/单片机,当然还有其它一些平台)。简单的说,对于多数应用,其它语言能做的事情C/C++ 几乎都能做,其它语言不能做的事情C/C++ 也可以做。
2) 辅助工具之:MATLAB
百度百科中是这么说的:“MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。”
MATLAB本身是一个不错的仿真、建模工具,但不适用于应用级项目的开发,原因很简单:效率与C/C++ 无法匹敌、不夸平台。(虽然后来出来了codegen可以将MATLAB部分代码转换为C++,但自动生成的还是无法与我们自己写的并优化的C++代码相比;还有MATLAB 的mex接口能够将C++与MABLAB接口对接,既然使用了MATLAB编程,那在应用级的领域还是无法与纯C++相比)
对于企业,特别是私企,公司除非给你充足的时间先使用MATLAB做完算法功能,然后再用C/C++ 慢慢改写,而且了解的朋友们都知道,MATLAB的精度与封装的函数标准与C/C++ 有很多不一样,改写起来相对麻烦一些,这样太慢太慢太慢了,项目不等人啊。试问人家成手能够用短时间写出C/C++ 做图像算法并马上可以投入应用,而自己却在那边慢慢磨MATLAB,然后再费老大劲改成纯C(比如需要警觉MATLAB与C++精度不一样的问题、图像处理基础函数标准不一样的问题),那么老板会比较喜欢谁呢?
如果大家从最初就使用C/C++ ,虽然一开始不数量会写的很慢,但是随着知识量和自各种库(比如图像处理库)的积累,那么总有一天开发速度会快起来的,量的积累,质的飞跃。
说了不少,本人并不否认MATLAB,MATLAB做为建模、仿真以及一些验证的工作(比如图形分析和处理、图表显示、图像仿真、语音仿真等)还是不错的,这方面大嘴绝对力挺MATLAB,目前本人也还在使用中。
一句话:对于多数普通人来讲,如果你的目标是想进企业做为一个实力派工程师,那么大嘴建议您以C/C++ 为主、MATLAB为辅助工具做开发。
3) 辅助工具之:OPENCV
随着opencv的问世,图像算法/计算机视觉/模式识别行业的门槛儿变低了,原因有以下几点:(1)opencv是以C/C ++为基础开发出来的,适用性强,windows下适用opencv开发的图像算法应用效率足够快(2)封装了很多基础图像处理函数和视觉算法,可谓“拿来即可用”。 (3)与嵌入式接口的统一趋势,如前几年大牛们人物搞出来的EMCV(基于C/C++ ),其基础架构和接口与opencv基本一致,但个人认为EMCV很多函数功能尚不完善,目前暂时无法与opencv相比。今后很多人在windows下基于opencv开发后,可以较为轻松的移植到DSP上,这种开发模式会是一种趋势。
说了opencv几条优点,但本人并不赞同只依赖opencv做开发,无论是图像算法行业还是其它很多行业,最重要的不是用什么工具,而是自己的基础知识和逻辑思维方式,opencv封装了很多基础函数,如果朋友们未搞懂其基础原理便加以使用,这种方式并不利于锻炼自己,抽空自己实现一下opencv和MATLAB的封装好的那些基础函数吧,久而久之,你会发现自己站的高度会越来越高的。
说到这里,改写一下评述MATLAB时的一句话:”对于多数普通人来讲,如果你的目标是想进企业做为一个实力派工程师,那么大嘴建议您以C/C ++为主、OPENCV和MATLAB为辅助工具做开发。”
4) 简单说说其它语言
其它开发语言,比如:C#,JAVA等(还有很多很多语言,不一一举例了)都是不错的开发语言,各自有各自的主应用领域和优势,也有很多很多牛人在使用,不过做图像处理嘛,如果不偏向企业级应用(如嵌入式中),虽然也可以用,但是了解的朋友做出来的算法效率实在不敢恭维…,又无法夸平台,在一些不要求效率的场合还是可以用的,所以请学生朋友们慎重选择开发语言,因为这与自己以后的择业以及职位方向有很大关系。