首页 > 代码库 > 如何开始学习OpenCV?

如何开始学习OpenCV?

OpenCV是什么,相信搞机器视觉的朋友都清楚。但是很多搞机器视觉的朋友却是对他又爱又恨。爱它因为它是免费的,如果能够好好掌握它,并运用到自己的机器视觉项目中,还是可以一定程度上降低项目成本。恨它是因为它不太好学习。原因有以下几个:
1、国内有关OpenCV的中文著作太少了,就2本,而且还是1.1版本的,已经和现在最新版本2.4.3差别太大,就算是学习了,过渡到最新版也要花一定的时间和精力。
2、直接学习较高版本,可是没有相应的教程可以参考。直接看英文版本的帮助文档吧,对于英文不好的朋友,难度很大。
3、就算是英文可以的朋友,该如何高效的学习OpenCV,估计有些人也没有一个良好的方法,导致学习效果不好。
   为了帮助那些想学OpenCV却又不得法的朋友,本人姑且把自己自学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类和函数的功能作用搞清楚,形成自己的思路,最后抛开原来的代码,按照自己的思路,把代码敲进去,这样才能实现消化吸收。
当然每个人的学习方法未必相同,或许别人有自己的独特的学习OpenCV的更好方法。如果是这样的话,不妨拿出来分享一下。
最后,要学好OpenCV并利用OpenCV做机器视觉项目,仅靠OpenCV提供的API是不够,还需要补充一定的数字图像处理的基础知识,不求自己写处理算法,但是每个OpenCV处理算子的功能,应用范围,是要清楚的,只有这样,才在具体的应用中知道该使用什么样的API。
以上就是我目前自学OpenCV 2.4.3的一点点心得,拿出来和大家分享一下。如果是OpenCV高手,还烦请口下留情,少吐槽,多指点。如果能够帮助到新手,我甚感欣慰。