opencv

来源:互联网 发布:天庭淘宝店全集下载 编辑:程序博客网 时间:2024/05/13 07:25

如果你曾搜索过图像处理、计算机视觉等相关方面的工作,基本都会要求了解或掌握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有效率呢?为了帮助那些想学OpenCV却又不得法的朋友,下面跟大家说说个人的一些看法吧!

1、先去下载最新版OpenCV,网址如下:http://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-win/2.4.3/OpenCV-2.4.3.exe。下载完成后解压到相应目录。本人解压到D:\Program Files\OpenCV2.4.3。

2、有的文章提到使用CMake把OpenCV下面的范例生成为visual studio的工程,此处我没有这样做。直接使用范例。这里先把OpenCV目录下面的几个重要目录做个说明(见附件):

doc目录:主要包含OpenCV的帮助文档。其中opencv2refman.pdf主要是OpenCV的各种类和函数的使用说明。opencv_tutorials.pdf,主要是下面教学代码目录里面各个教学范例的简单讲解。opencv_cheatsheet.pdf主要是最常用OpenCV类和函数的集合。此3个PDF文档对自学者帮助最大。

samples\cpp\tutorial_code目录:里面包含基本教学代码。和上面的opencv_tutorials.pdf文档遥相呼应,构成一个完整的自学体系。

build目录:包含编译,调试,发布所需要的各类动态库,静态库,头文件等。

因为OpenCV2.4.3好像只支持Visual Studio 2008以上版本,我在这里以Visual Studio 2008为例讲解如何让范例跑起来

1、添加环境变量:见图片。此处我在path环境变量中添加如下目录:D:\Program Files\OpenCV2.4.3\build\x86\vc9\bin。记住在前面一个目录后面加分号。

2、在Visual Studio中包含头文件目录:见附件中的图片,已经用红色矩形框标识如何操作。

3、在Visual Studio中包含库文件目录:见附件中的图片,已经用红色矩形框标识如何操作。

4、建立一个新建Visual Studio VC win32控制台应用工程,这里我选择带预编译头的工程,省去添加cpp文件的工作。

5、代码创建:这里我选择samples\cpp\tutorial_code\ImgProc\Morphology_2.cpp文件。先添加包含目录,如下(以后所有范例均可以如下添加):

#include <opencv2/opencv.hpp>

#include <stdio.h>

然后复制代码,见附件:

6、编译文件:自然少不了要包含静态库,要添加的库(debug版和release差别就是文件名后多了一个d标识是debug版)如下:

debug版

opencv_calib3d243d.lib

opencv_contrib243d.lib

opencv_core243d.lib

opencv_features2d243d.lib

opencv_flann243d.lib

opencv_gpu243d.lib

opencv_haartraining_engined.lib

opencv_highgui243d.lib

opencv_imgproc243d.lib

opencv_legacy243d.lib

opencv_ml243d.lib

opencv_nonfree243d.lib

opencv_objdetect243d.lib

opencv_photo243d.lib

opencv_stitching243d.lib

opencv_ts243d.lib

opencv_video243d.lib

opencv_videostab243d.lib

release版

opencv_calib3d243.lib

opencv_contrib243.lib

opencv_core243.lib

opencv_features2d243.lib

opencv_flann243.lib

opencv_gpu243.lib

opencv_haartraining_engine.lib

opencv_highgui243.lib

opencv_imgproc243.lib

opencv_legacy243.lib

opencv_ml243.lib

opencv_nonfree243.lib

opencv_objdetect243.lib

opencv_photo243.lib

opencv_stitching243.lib

opencv_ts243.lib

opencv_video243.lib

opencv_videostab243.lib

7、字符集设置:如果编译过程中出现如下错误:

不能将参数 1 从“_TCHAR *”转换为“const std::string &”原因如下:无法从“_TCHAR *”转换为“const std::string”,请字符集设置为“使用多字节字符集”,。

8、最后指定命令后参数,这样就可以不用在windows命令行下输入参数了,方便调试,但是要注意,图片必须放在你所建立的工程目录下(和.cpp以及.h文件同一目录)。否则就要加上相应的路径。如果参数多于1个,请以空格分开。

9、支持所有参数设置完成,开始编译运行吧。

如果Visual Studio无问题的话,按照以上按部就班操作,每个范例均可以正常运行。

学习OpenCV 2.4.3,不要先急着敲代码,应该要先把它的代码运行一遍,看看是什么结果。先知道运行结果,再逆向推导编程思路,最后看代码,分析代码,把每一个OpenCV类和函数的功能作用搞清楚,形成自己的思路,最后抛开原来的代码,按照自己的思路,把代码敲进去,这样才能实现消化吸收。


0 0
原创粉丝点击