参考资料
练习题 icon lost
交流讨论
笔记
img lost

        OpenCV is an open source computer vision and machine learningsoftware library.

        The library has more than 2500optimized algorithms, which includes a comprehensive set of both classic andstate-of-the-art computer vision and machine learning algorithms. Thesealgorithms can be used todetectand recognize faces, identify objects,classify human actions in videos, track camera movements, track moving objects,extract 3D models of objects, produce 3D point clouds from stereocameras, stitch images together to produce ahigh resolution image of an entire scene,find similar images from an image database,remove red eyes from images taken using flash, follow eye movements, recognize scenery and establishmarkers to overlay it with augmented reality, etc.

        这一段是opencv官方网站上对opencv的介绍性内容,从中可以看到其广泛应用。如果你曾搜索过图像处理、计算机视觉等相关方面的工作,基本都会要求了解或掌握opencv的开发。目前opencv支持的编程语言包括C,C++,Python,据说基于JAVA语言的也即将面世。Opencv支持的平台包括windows,linux,iOS,andriod,winCE,WindowsRT,到opencv2.4.9版本,与opencv结合的第三方库包括CUDA,opencl,openGL,QT,ffmpeg,gtk等,曾经还有过TBB,openMP,IPP等。微软的kinect for windows的SDK有具有使用opencv开发的例程,可见opencv应用之广泛。

       2006年,opencv1.0发布,主要基于Python和C语言,到2009年,opencv2.0面世,一个巨大的转变是增添了C++语言支持,从官方文档来看,未来的趋势是向C++语言靠拢。到2014年4月25日opencv2.4.9提供下载,虽不足十年的发展,但其却有着极其丰富的功能和巨大的应用市场。我从2012年的10月份开始接触opencv,那时需要做一个人群密度估计的应用,既是应用性的,一开始就放弃使用MATLAB,其实我一直以不喜欢用MATLAB。我接触的第一版opencv是2.4.3版本,当时导师要求我们统一使用这个版本,以方便我们讨论。后来接触到kinect,我们准备做一个基于深度信息的算法,考虑到已经具有opencv基础,所以就索性继续使用opencv进行开发。使我对opencv有真正意义上的理解是在今年的一个项目中,当时我需要使用一个linux系统的嵌入式设备获取网络摄像头的数据并进行智能视频分析,肯定是要使用opencv,但移植的过程实在困难,在移植的过程中,我几乎把opencv曾经的所有版本尝试了一遍,从移植的过程中,我渐渐的对opencv的构成有了深入理解。网上的很多人都是移植opencv1.0的版本,说是这个版本是C的,ARM的支持较好,我想这都什么年代了,gcc还会有不支持C++的说法!当我看到了网上有人的确将opencv2.0以后的版本移植成功以后,我更是坚定了自己的想法。毕竟历史是在进步的,XP系统,VC6.0这类的东西早已跟不上时代了,新东西的出现肯定是要优于旧的东西的,在移植的过程中的确是我想想的这样,在opencv2.4.5之后的版本中有专门针对于移植方面的指导。

       因为本文的重点是opencv的简介,对于比如linux平台以及嵌入式平台的安装内容会在以后的文章中详尽叙述,本文以opencv2.4.9+vs2012+win7为平台,windows平台下的安装相对较简单,大家可以参考其他人的博客或是这个网站。我的电脑上是安装在D:\下,进入D:\OpenCV-4.9\opencv\后会发现两个文件夹,分别为build和soures。

                                                  

build中的doc中有两个重要的文档opencv2refman.pdf和opencv_tutorials.pdf,其中opencv2refman.pdf中介绍了opencv中的数据类型以及函数接口,opencv_tutorials.pdf中结合图像处理知识介绍opencv的一些应用及例程,我强烈建议好好学习这两个文档,这两个就像是opencv的说明书,弄清其结构对于深度学习opencv会有很大的帮助。build文件夹就是安装过程中生成的目录,它里面包含有各种平台所需的库文件和头文件,而sources是opencv的源码,其中3rdparty中涉及第三方库的集成,比如QT,ffmpeg等,apps中放置的是有关训练分类器的源码,cmake中放置的是opencv的编译规则,特别是在移植opencv时,这一块内容非常重要。data中放置了一些已经训练好的分类器,比如在人脸检测,行人检测中用到的分类器都在这里,doc文件是用来生成build中doc文件夹的源码,include中包含了opencv中的头文件,modules中是opencv中各个模块的源码,比如最常见的core,highgui等,如果你想查看某个函数的具体实现,可以到这个文件夹中去查找。platforms中是有关opencv在不同系统或平台下的移植规则,这个内容是在2.4.5版本之后才有的。samples中有大量的例程,初学者可以多看看这里。

       上面说了opencv的源码及安装文件的结构,要想具体了解opencv具体能干什么,还需要结合opencv_tutorials.pdf这个文档,打开后,查看目录:



从目录中大致就可以看出opencv可以做哪些事了,但是对于opencv的使用,这里并不是全部,有很多的函数这里都没有涉及,就目前最新版的2.4.9来说,如果你想使用openCL或CUDA来对程序进行加速的话,那你需要结合例程samples和文档opencv2refman.pdf。导师曾今让我教学弟学妹们怎么去学习使用opencv,我想一些基础的东西(无关算法)肯定要先学会,比如如何打开并显示一幅图片,灰度处理,感兴趣区域提取,画线,图片叠加等,其实对于SDK的学习都差不多,但一定要静心的去学,别指望什么都从例程中学到。

资料来源 Opencv简介及学习路线
博客作者 dengtaocs
前往答题
我的笔记