最近发现很多童鞋想学习基于OpenCV的人脸识别不得其法,正好博主前段时间在做这方面的东西,遂整理写成系列博客,一起交流学习。内容主要包括OpenCV配置、使用OpenCV实现人脸识别功能以及源码分析。
本篇文章主要介绍了如何安装OpenCV,以及在Visual Studio2012开发环境下配置OpenCV。
说明:本文的OpenCV版本为2.4.10,Visual Studio(下面简称VS)的版本是Visual Studio2012(vs11),系统是win7。
OpenCV的最新版本已经更新到3.0,但很多童鞋还在使用2.x的版本,所以本文以OpenCV2.4.10的版本(主要是博主在用这个版本)为例进行讲解安装和环境配置,在文章后面也会介绍如何配置OpenCV3.0。
好啦,下面正式开始。
首先,OpenCV的下载地址:http://opencv.org/downloads.html,网页上有各个版本的OpenCV,根据自己的需要可自行下载。
下载完成后,找到OpenCV的保存位置,双击,将出现如下界面:
即是将OpenCV文件解压到指定文件夹,可以根据自己的习惯指定解压的位置,这里会直接解压成名为“opencv”的文件夹,所以并不需要再新建opencv文件夹。
这里,博主直接将其安装在E盘的根目录下,等待解压完成,即完成了OpenCV的安装,其实是解压啦。
好啦,下面来进行Windows系统环境配置~
当然啦,电脑上必须先安装好Visual Studio,好啦,开始,这个部分包括系统环境配置和VS开发环境配置。
开发使用OpenCV中的函数均通过调用DLL链接库实现,所以我们需要将这些链接库的目录添加到系统环境变量中,这样才可以正常使用OpenCV.
右键”我的电脑“(或者菜单->控制面板->系统与安全->系统),在打开的界面左侧点击高级系统设置:
在“高级“菜单栏中,点击环境变量:
之后会弹出的窗口界面,在”系统变量(s)“中找到"Path",选中并点击编辑(或者双击)
在弹出的窗口中,将OpenCV的以下路径添加进去(请先看下面的注意事项,切不可直接复制),32位系统的童鞋只需添加第一个路径,64位系统的童鞋如果需要在x64平台上进行程序开发,需要全部添加。添加到变量值(v)中,注意中间要加分号(;),如果不知道自己电脑是32位还是64位操作系统,请看注意事项。
E:\opencv\build\x86\vc11\bin
E:\opencv\build\x64\vc11\bin
注意事项:
完成系统环境变量配置后,需要重启电脑才可生效,重启电脑后,我们来进行VS的环境配置。
在VS里配置OpenCV需要新建一个工程项目,打开VS,并点击新建项目如下图(或者菜单栏“文件->新建->项目")
在弹出的窗口界面的左侧,选择”已安装->模板->Visual C++->Win32控制台应用程序“,并在下面的"名称(N)"和“位置”分别输入项目的名字和项目保存的位置,然后点击右下角“确定”,进行下一步
点击“下一步”
在接下来的界面中,选择“附加选项”下的 “空项目”,在前面打勾,并点击“完成”
现在,我们成功新建了一个工程,在VS左侧(或右侧)的解决方案资源管理器窗口中,选中“源文件”并右键->“添加”->"新建项"
在弹出的窗口中,选中“C++ 文件(.cpp)”,在下面的"名称(N)"一栏中修改文件的名字
这样就完成了添加新建C++源文件的操作,之后会在这个源文件里编写我们的第一个OpenCV代码。好啦,现在开始配置OpenCV开发环境。
首先呢,在菜单栏中,点击“视图”->“属性管理器”
这样就打开了“Test”项目的属性管理器,展开下面的分支,可以看到如下图所示
这里的“Debug“和”Release“是解决方案配置,”Debug“通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。“Release” 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
OpenCV的使用也要区分Debug和Release两个版本,博主在一些其他博客文章中看到会将这两种版本统一进行配置,但在博主实际使用开发时出现了问题,所以在这里,博主建议大家按照下面的方法进行配置,亲测无误。
在上图的红色矩形框里,包括了两个条目:“Debug(Release)|Win32“和”Microsoft.Cpp.Win32.user",下面分别针对这两个条目介绍两种方法来配置VS环境:
方法一(配置一次成功后,将无需再在新建的工程里再进行配置)
(1)添加包含目录,配置OpenCV的头文件
双击”Microsoft.Cpp.Win32.user"(两个均可),在弹出窗口中,选择”通用属性->VC++ 目录->包含目录“,在其后的下拉菜单中选择”编辑“
点击下图中的新建目录(红色矩形内),将以下三个目录添加进去,注意自己电脑的实际"opencv\build\include"目录路径,切不可直接复制。比如将OpenCV安装在了D:\Program Files目录下,需要将目录改为D:\Program Files\opencv\build\include等。
E:\opencv\build\include
E:\opencv\build\include\opencv
E:\opencv\build\include\opencv2
添加完成后,点击确定。
在OpenCV的build\include文件里,都是OpenCV的头文件,如果在程序运行的时候出现无法找到头文件的问题,可检查包含目录是否添加正确。
(2)添加库目录,配置OpenCV的.lib文件
同样是在“Microsoft.Cpp.Win32.user属性页”窗口下,“通用属性->VC++目录->库目录”,在其后的下拉菜单中,点击“编辑”
然后将下面的路径添加进去,同样需要根据自己电脑的实际路径进行添加,这里不在赘述
E:\opencv\build\x86\vc11\lib
E:\opencv\build\x64\vc11\lib
同样这里需要注意,32位和64位操作系统的区别以及VS版本的区别,32位系统的同学只需添加第一个路径(x86),64位系统的童鞋根据需要天剑,建议只添加第一个(x86)的路径,以免不同版本的链接库出现混乱。
添加完成后,点击确定。
同样的,如果在程序运行时,提示无法打开.lib文件,可检查库目录是否添加正确。
(3)添加“附加依赖项”,配置OpenCV的.lib链接库
在“Microsoft.Cpp.Win32.user属性页”窗口下,“通用属性->链接器->输入->附加依赖项”,在其后的下拉菜单中,点击“编辑”
在弹出的窗口中,将下面各链接库的名字添加进去,注意,这里以d结尾的文件是Debug文件,不带d的是Release文件。
博主建议大家将不带d的是Release文件放在以d结尾的文件是Debug文件前面(如下所示),并一起添加到附加依附项里,因为在博主编程使用的时候发现,将Debug版本的链接库放前面,会造成使用Release版本时无法找到对应的链接库即不带d的文件。
以下是OpenCV2.4.10版的.lib,2.x的其他版本只需修改位数,例如,2.4.9版将改为opencv_objdetect249.lib等。
opencv_objdetect2410.lib
opencv_ts2410.lib
opencv_video2410.lib
opencv_nonfree2410.lib
opencv_ocl2410.lib
opencv_photo2410.lib
opencv_stitching2410.lib
opencv_superres2410.lib
opencv_videostab2410.lib
opencv_calib3d2410.lib
opencv_contrib2410.lib
opencv_core2410.lib
opencv_features2d2410.lib
opencv_flann2410.lib
opencv_gpu2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_legacy2410.lib
opencv_ml2410.lib
opencv_ml2410d.lib
opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_gpu2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_objdetect2410d.lib
opencv_ts2410d.lib
opencv_video2410d.lib
opencv_nonfree2410d.lib
opencv_ocl2410d.lib
opencv_photo2410d.lib
opencv_stitching2410d.lib
opencv_superres2410d.lib
opencv_videostab2410d.lib
上述文件名即E:\opencv\build\x86\vc11\lib目录下所有的文件名。
这里.lib文件所对应的即dll文件,在使用OpenCV时,程序会根据.lib文件调用dll文件。
如果方法一出现问题,可以按照方法二进行配置。
方法二(每次新建项目都需要配置)
前两步配置即
(1)添加包含目录,配置OpenCV的头文件
(2)添加库目录,配置OpenCV的.lib文件
和方法一的步骤相同,请按照上述步骤操作,不再赘述,区别在于第三步,如下
(3)添加“附加依赖项”,配置OpenCV的.lib链接库
还是在项目的属性管理器窗口,双击”Debug|Win32“,这样打开的是“Debug属性页”
在Debug属性页下,选择“通用属性->连接器->输入->附加依赖项”,在其后的下拉菜单中点击“编辑”
在弹出的“附加依赖项”窗口里,添加如下字符,即添加Debug版本的.lib文件(以d结尾),其他版本的OpenCV注意尾数的不同。
opencv_ml2410d.lib
opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_gpu2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_objdetect2410d.lib
opencv_ts2410d.lib
opencv_video2410d.lib
opencv_nonfree2410d.lib
opencv_ocl2410d.lib
opencv_photo2410d.lib
opencv_stitching2410d.lib
opencv_superres2410d.lib
opencv_videostab2410d.lib
点击确定。
然后,在项目属性 管理器窗口下,双击“Release|Win32”,打开"Release属性页",进行上面相同的操作,不在赘述,看图
将下面字符添加到“附加依赖项”,即Release版本的.lib文件,其他版本的OpenCV注意尾数的不同。
opencv_objdetect2410.lib
opencv_ts2410.lib
opencv_video2410.lib
opencv_nonfree2410.lib
opencv_ocl2410.lib
opencv_photo2410.lib
opencv_stitching2410.lib
opencv_superres2410.lib
opencv_videostab2410.lib
opencv_calib3d2410.lib
opencv_contrib2410.lib
opencv_core2410.lib
opencv_features2d2410.lib
opencv_flann2410.lib
opencv_gpu2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_legacy2410.lib
opencv_ml2410.lib
点击确定,配置完成。
这样配置后,不用担心,Debug版本和Release版本的链接库的混用,但再次提醒,方法二需要在每次新建项目的时候重新配置。
对于OpenCV3.0版本,也是按照上述方法进行配置,但要将“附加依赖项”里的.lib的的文件名只需改为添加:
Debug版本的库:
opencv_ts300d.lib
opencv_world300d.lib
Release版本的库:
opencv_ts300.lib
opencv_world300.lib
好啦,至此,OpenCV的配置完成,下面编写个简单的程序进行测试。
在上面新建的Test工程里,将下面的代码写到main.cpp源文件里,或者新建一个工程,测试OpenCV是否可以正常使用。
程序的功能就是载入一张图片,然后显示出来。代码如下:
#include //程序所需头文件
#include
using namespace cv; //命名空间
int main()
{
//载入图像
Mat src = imread("E:/小路孩.jpg");
//创建显示图片的窗口
namedWindow("小路孩");
//在窗口显示图片
imshow("小路孩", src);
//一直等待,直到有按键按下
waitKey(0);
return 0;
}
大功告成,让我们一起开启OpenCV之旅~