您的位置:首页 > 运维架构

OpenCV 2.3.x/2.4.x在Visual Studio 2005/2008、Visual Studio 2010和Visual Studio 2012配置方法详解

2013-03-25 23:28 495 查看
    由于OpenCV自2.3.0版本开始就提供了OpenCV-2.3.x -win-superpack.exe或OpenCV-2.4.x.exe文件,该文件解压后,会生成Windows版本的源代码,这种源代码可以通过cmake、intel TBB与Visual Studio 2005/2008/2010结合编译生成目标文件(包括动态链接库、可执行文件等),出现的问题也就那么几个,非常容易便能解决。本人技术有限,不能够直接使用Unix源码在Windows下编译(会有错误,如图1所示,网上寻找很多方法都不能解决),如果你成功了(千万不要告诉我要修改源代码,这个我也知道可以的),请直接和我联系:shuxiao9058#qq.com(请将#替换为@),本人不胜感激。



图1 使用linux源码编译产生错误

    另外尤其重要的是OpenCV自2.3.0版本开始就给我们开发者提供了极大的便利,就是说我们不用考虑其在Windows下编译生bin、lib等必须使用的库文件和bin文件。只需要将OpenCV-2.3.x-win-superpack.exe或OpenCV-2.4.x.exe(本文是以OpenCV_2.3.1介绍配置方法的,有关OpenCV版本的地方需要修改)解压,就会发现opencv\build\下面包含各个平台的目标文件,使用这些文件我们只需要稍许配置就可以正常使用了。



图2 superpack解压后opencv\build\的目录结构
    又由于在Visual Studio 2005和Visual Studio 2008下配置方法完全相同,而在Visual Studio 2010下配置则不同于前者。所以本文主要讲述如何在Windows系统下进行OpenCV编译环境的配置。
本人使用的系统摘要:

 


Step1. 首先我们先把opencv\build\x86(虽然我的电脑是64位的系统,但是32位的库文件完全能够正常使用,而且大多人都是使用win32编译平台)和opencv\build\include下的所有文件夹都拷贝至C:\Program Files\OpenCV目录下(OpenCV是我新建的文件夹),如果有必要,可能多建几层目录,以放不同平台的链接库。我拷贝后的目录结构如图3所示。
备注:原则上应该把这些文件拷贝到C:\Program Files (x86) \OpenCV目录下,因为在x64系统中,64位软件均应装在C:\Program Files\目录下,这里将x64的OpenCV库拷贝到C:\Program Files\目录下只是为了方便。

 


图3 C:\Program Files\OpenCV目录结构

Step2. 接下来我们来配置系统环境变量,在桌面上右击“计算机”,选择“属性-高级系统设置”,进入“高级”选项卡,“环境变量-系统变量”,如图4所示:



图4 系统环境变量

    编辑“Path”变量,在最后添加OpenCV的bin目录所在全路径。如我应该添加以下两个变量:“C:\Program Files\OpenCV\vc9\bin”和“C:\Program Files\OpenCV\vc10\bin”,这里要注意的是变量之间是以分号“;”分隔的(玩过Linux的都知道Linux下系统变量之间是以冒号“:”分隔的)。

    修改完系统环境变量后,注销一下电脑,或者重启“explorer.exe”进程(如图5所示)即可,这里不过多赘述。



图5 重启“explorer.exe”进程

Step3. 完成上面的操作后,下面的内容我准备将Visual Studio 2005/2008和Visual Studio 2010分开来介绍。

(1)Visual Studio 2005/2008下配置OpenCV目录
    打开Visual Studio 2005/2008依次选择“工具-选项-项目和解决方案-VC++ 目录”(注意平台选择的是Win32),依次添加包含文件(头文件)和库文件(这里我们使用动态链接库),如图6所示。

 


图6 VC++ 目录
    添加包含文件,注意前面我们将include目录放在了“C:\Program Files\OpenCV\”目录下了,因此这里我们添加的包含目录为“C:\Program Files\OpenCV\include”,如图7所示。



图7 添加包含文件(头文件)
    添加库文件,这里我们使用动态链接库,我们添加的库文件目录为“C:\Program Files\OpenCV\vc9\lib”,如图8所示:



图8添加库文件(动态链接库)
OK,配置完成后接下来就可以新建项目体验OpenCV给我们带来的编程之快了,这里先不做介绍。
(2)Visual Studio 2010下配置OpenCV目录
糟糕,当我们打开Visual Studio 2010依次选择“工具-选项-项目和解决方案-VC++ 目录”的时候,系统会提示如图9所示信息:



图9 Visual Studio 2010 VC++ 目录不显示修改选项
    提示我们单击“?”获取更多信息,经过艰辛寻找原因后,我们知道项目属性表是扩展名为 .props 的基于 XML 的文件。 它使您能为生成工具(如编译器或链接器)指定开关,并创建 用户定义的宏。
    经过查找文件后,我发现在“C:\Users\jiya\AppData\Local\Microsoft\MSBuild\v4.0”目录(你可能要修改一下路径)下有项目默认配置文件。

    因此,我们可以编辑“Microsoft.Cpp.Win32.user.props”文件以添加相关的VC++ 目录。其中<ExecutablePath>和</ExecutablePath>标签之间是指可执行文件目录、<IncludePath>和</IncludePath>标签之间是指包含文件目录、<LibraryPath>与</LibraryPath>标签之间是指库文件目录,本人编辑后的内容如下所示:

[html] view
plaincopy

<?xml version="1.0" encoding="utf-8"?>  

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

  <PropertyGroup>  

    <ExecutablePath>C:\Program Files\OpenCV\vc10\bin;$(ExecutablePath)</ExecutablePath>  

    <IncludePath>C:\Program Files\OpenCV\include;C:\Program Files (x86)\tbb40_20120201oss\include;$(IncludePath)</IncludePath>  

    <ReferencePath>$(ReferencePath)</ReferencePath>  

    <LibraryPath>C:\Program Files\OpenCV\vc10\lib;C:/Program Files (x86)/tbb40_20120201oss/lib/ia32/vc9;$(LibraryPath)</LibraryPath>  

    <SourcePath>$(SourcePath)</SourcePath>  

    <ExcludePath>$(ExcludePath)</ExcludePath>  

  </PropertyGroup>  

</Project>  

Visual Stuido 2012与Visual Studio 2010类似,只是这里的配置文件与上面略有不同,如下为原始Visual Studio 2012“Microsoft.Cpp.Win32.user.props”配置文件:

[html] view
plaincopy

<?xml version="1.0" encoding="utf-8"?>   

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

  <ImportGroup Label="PropertySheets">  

  </ImportGroup>  

  <PropertyGroup Label="UserMacros" />  

  <PropertyGroup />  

  <ItemDefinitionGroup />  

  <ItemGroup />  

</Project>  

这里我们只需要在上述配置文件中添加“PropertyGroup”标签组,本人配置后的文件为(2013年01月15日),系统为Windows 8专业版,其内容如下所示:

[html] view
plaincopy

<?xml version="1.0" encoding="utf-8"?>   

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

  <PropertyGroup>  

    <ExecutablePath>C:\Program Files (x86)\OpenCV\bin;C:\Program Files (x86)\tbb41_20121003oss\bin\ia32\vc11;$(ExecutablePath)</ExecutablePath>  

    <IncludePath>C:\Program Files (x86)\OpenCV\include;C:\Program Files (x86)\tbb41_20121003oss\include;$(IncludePath)</IncludePath>  

    <ReferencePath>$(ReferencePath)</ReferencePath>  

    <LibraryPath>C:\Program Files (x86)\OpenCV\lib;C:\Program Files (x86)\tbb41_20121003oss\lib\ia32\vc11;$(LibraryPath)</LibraryPath>  

    <SourcePath>$(SourcePath)</SourcePath>  

    <ExcludePath>$(ExcludePath)</ExcludePath>  

  </PropertyGroup>  

  <ImportGroup Label="PropertySheets">  

  </ImportGroup>  

  <PropertyGroup Label="UserMacros" />  

  <PropertyGroup />  

  <ItemDefinitionGroup />  

  <ItemGroup />  

</Project>  

Step3. 新建项目、测试
(1)编辑代码
“新建项目”,选择“Visual C++-空项目”,输入项目名“OpenCV”,“添加新项-代码-C++ 文件”,输入文件名“OpenCV.cpp”,编辑代码,这里本人使用的测试代码如下所示:

[cpp] view
plaincopy

#include <opencv/highgui.h>  

  

int main( int argc, char** argv ) {  

    IplImage* img = cvLoadImage( argv[1] );  

    cvNamedWindow( "OpenCV", CV_WINDOW_AUTOSIZE );  

    cvShowImage( "OpenCV", img );  

    cvWaitKey(0);  

    cvReleaseImage( &img );  

    cvDestroyWindow( "OpenCV" );  

  

    return ( 0 );  

}  

(2)添加附加依赖项有两种方法:
法1:右击项目名称,选择“属性-配置属性-链接器-输入”,将“opencv_highgui231d.lib opencv_core231d.lib opencv_ml231d.lib opencv_imgproc231d.lib”(这里注意Visual Studio 2010下依赖项之间是以分号间隔的,因此应为“opencv_highgui231d.lib;opencv_core231d.lib;opencv_ml231d.lib;opencv_imgproc231d.lib;”,如图10所示)拷贝到“附加依赖项”栏中,确定即可。

 


图10 Visual Studio 2010“添加附加依赖项”
法2:在上述代码头文件下方添加以下代码:

[cpp] view
plaincopy

#pragma comment( lib, "opencv_highgui231d.lib" )  

#pragma comment( lib, "opencv_core231d.lib" )  

#pragma comment( lib, "opencv_ml231d.lib" )  

#pragma comment( lib, "opencv_imgproc231d.lib" )  

(3)编译即可,上述程序在main函数中使用了参数,如果想调试的话,可以右击项目名称,选择“属性-配置属性-调试”,在命令参数项中输入参数(如“D:\\Lena.jpg”,注意这里是双反斜线,起转义作用,如图11所示)即可。

 


图11 Visual Studio 2010修改“命令参数”
(4)运行效果截图,如图12所示,至此则说明OpenCV运行正常。



图12 Visual Studio 2010下测试例子正常运行

备注:在配置OpenCV的时候你可能需要intel TBB,但是这不是必需的。如果在编译程序的时候提示“找不到tbb_debug.dll”等问题,请下载intel TBB并像上面一样配置环境变量及VC++目录(注意要注销一下电脑或者重启“explorer.exe”进程)。

2013年01月19日更新:

    添加附加依赖项有两种方法,其中第二种方法我们可以用一种比较简便的方法先写入一个“.txt”文件(根据需要对批处理文件进行修改,如果需要将release版本的库文件,则将“*243d.lib”更改为“*243.lib”,注意“243”为OpenCV的版本号),然后将再对其进行修改即可。批处理脚本为:

[plain] view
plaincopy

dir *243d.lib /ON /B > libd.txt  

    可以将其写入一个“.bat”或“.cmd”文件并放在OpenCV库目录(lib文件夹)下,如图13所示:



图13 准备批处理文件

    然后,直接运行批处理文件即生成一个名为“libd.txt”的文件,其内容如图14所示:



图14 批处理生成的文件名列表

    然后如图15所示分别将“opencv_”和“243d.lib”替换为“#pragma comment( lib, "opencv_”和“243d.lib" )”即可。



图15 输入相关内容后,单击“全部替换”

    至此,便完成了添加附加依赖项的第二种方法所需要的代码,如下所示以供大家参考。

[cpp] view
plaincopy

#pragma comment( lib, "opencv_calib3d243d.lib" )  

#pragma comment( lib, "opencv_contrib243d.lib" )  

#pragma comment( lib, "opencv_core243d.lib" )  

#pragma comment( lib, "opencv_features2d243d.lib" )  

#pragma comment( lib, "opencv_flann243d.lib" )  

#pragma comment( lib, "opencv_gpu243d.lib" )  

#pragma comment( lib, "opencv_highgui243d.lib" )  

#pragma comment( lib, "opencv_imgproc243d.lib" )  

#pragma comment( lib, "opencv_legacy243d.lib" )  

#pragma comment( lib, "opencv_ml243d.lib" )  

#pragma comment( lib, "opencv_nonfree243d.lib" )  

#pragma comment( lib, "opencv_objdetect243d.lib" )  

#pragma comment( lib, "opencv_photo243d.lib" )  

#pragma comment( lib, "opencv_stitching243d.lib" )  

#pragma comment( lib, "opencv_ts243d.lib" )  

#pragma comment( lib, "opencv_video243d.lib" )  

#pragma comment( lib, "opencv_videostab243d.lib" )  

#pragma comment( lib, "opencv_world243d.lib" )  

附录:
OpenCV视觉库:http://sourceforge.net/projects/opencvlibrary/
TBB Home:http://threadingbuildingblocks.org/
Cmake:http://www.cmake.org 
安装opencv 2.3出现错误“opencv error PRJ0019: 工具从“正在执行生成后事件...”:http://blog.csdn.net/yongshengsilingsa/article/details/6743680
附件下载:
http://115.com/file/an0ceovg# OpenCV-2.3.1-win-superpack.exe
http://115.com/file/bem4144r# OpenCV-2.4.0.exe
http://115.com/file/an050xhb# tbb40_20120201oss_win.zip

编译后文件(无需再编译,可直接使用):

http://download.csdn.net/detail/shuxiao9058/4273344# OpenCV-2.4.0-win&tbb.rar

http://download.csdn.net/detail/shuxiao9058/4355642# OpenCV-2.4.1_build&tbb_vs_(x86).rar

http://download.csdn.net/detail/shuxiao9058/4355701# OpenCV-2.4.1_build&tbb_vs_(x64).rar

2013年01月16日更新:

http://download.csdn.net/detail/shuxiao9058/4987079# OpenCV-2.4.3_for_vs2005_x86

http://download.csdn.net/detail/shuxiao9058/4983665# OpenCV-2.4.3_for_vs2008_x86

http://download.csdn.net/detail/shuxiao9058/5000800# OpenCV-2.4.3_for_vs2012_x86&x64

转自:http://blog.csdn.net/shuxiao9058/article/details/7525067
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: