在VS2013下编译openCV(最新适用)

来源:互联网 发布:意识形态 知乎 编辑:程序博客网 时间:2024/05/05 07:27

最近由于学习原因,需要用到openCV,但我用的VS2013比较新,openCV中并没有包含可用于VS2013的库文件,因而需要自行使用VS2013编译openCV。

软件环境

Windows 7 64位旗舰版

Visual Studio 2013 专业版

OpenCV 2.4.6

TBB 4.2 update 2

CMake 2.8.12.1

文件准备(下载地址见附录)

首先需要下载openCV,本文使用的是openCV2.4.6。

TBB(全称ThreadingBuilding Blocks),这是由 Intel针对多核平台开发的一组开源的C++的模板库,使用该库对openCV的多核性能有一定的提升,不使用也不影响openCV的正常编译。

有的书籍除了TBB外还会提到IPP,但就目前网上的资料来看,IPP对openCV性能提升有限,而且,IPP并不是免费的,它作为Intel推出的一个商业扩展库,只有30天的免费试用期。

CMake,用于将openCV源代码组织为IDE(VS2013)所使用的项目文件,并且可以方便地按照自己的需要进行各项编译参数的配置。

打开下载的OpenCV-2.4.6.exe,选择解压目录(这里目录没有太多特别限制,但最好路径中不要包含中文或者其他特殊字符,这里我把它放在  D:\下),解压,完成后即可在解压目录中看到opencv文件夹。

然后解压下载的TBB压缩包,为了方便,我将解压后得到的文件夹复制到openCV目录下,如下图

然后在opencv目录中建立文件夹BuildWithTBB文件夹,备用。

编译TBB

打开VS2013,点“打开项目”,在tbb42_20131003oss\build\vs2010中找到makefile.sln,打开。

会提示项目版本需要转换,点确定,然后在右键点击左边解决方案管理器中的tbb,分别生成Debug和Release版本,如下图:

 

生成结束后即可在tbb42_20131003oss\build\vs2010下看到ia32文件夹,里面包含Debug和Release两个文件夹。在tbb42_20131003oss文件夹下新建lib文件夹,将ia32文件夹复制到该文件夹下。

生成OpenCV解决方案

首先安装CMake,一路下一步即可。

打开安装好的CMake,在Where is the source code:一栏填入opencv目录,我之前解压到D盘的根目录下,所以这里选择D:\opencv。在Where to build the binaries一栏填入opencv目录下的BuildWithTBB文件夹

点击Configure

在弹出的对话框中选择Visual Studio 12(即Visual Studio 2013)

在下面的编译参数设置中找到WITH_TBB,打上勾

再次点击Configure,显示TBB_INCLUDE_DIRS-NOTFOUND

这里我们手动指定TBB的include文件夹路径,它在

D:/openCV/tbb42_20131003oss/include

注意下划线的方向,是左下划线而非Windows常见的右下划线。

 

再次点击Configure,完成后点击Generate,关闭CMake。至此编译前的配置工作已经全部完成。

 

编译openCV

修改代码

用VS2013打开BuildWithTBB文件夹下的OpenCV.sln。

首先,我们要修改openCV的源代码,不然编译会出错。

在解决方案资源管理器中找到modules-> opencv_features2d-> Src\features2d_init.cpp第187行,在obj.detector前加上(Ptr<Algorithm>&),如图:

 

在以下文件开头添加 #include <algorithm>

3rdparty\ IlmImf \Src\ImathMatrixAlgo.cpp

3rdparty\ IlmImf \Src\ImfAcesFile.cpp

3rdparty\ IlmImf \Src\ImfOutputFile.cpp

3rdparty\ IlmImf \Src\ImfScanLineInputFile.cpp

3rdparty\ IlmImf \Src\ImfTiledMisc.cpp

3rdparty\ IlmImf \Src\ImfTiledOutputFile.cpp

生成

右键点击CMakeTargets->INSTALL,选择生成。

生成成功

 

将编译配置改为Release,再次生成

 

编译完成

编译完成后opencv目录的大小应该有8到9G了,我们可以精简一下,只保留

D:\openCV\BuildWithTBB\bin

D:\openCV\BuildWithTBB\lib

D:\openCV\build\include

D:\openCV\tbb42_20131003oss\lib

四个文件夹,其余全部删除,可以大大减少磁盘空间占用。不过这样一来要重新编译的话就要按照前面的步骤重做一次了。

 

环境配置

设置环境变量

右键点击桌面上的“我的电脑”->属性->左侧的高级系统设置->环境变量,这里有用户变量和系统变量,两个都可以。在其中一个找到Path变量,双击打开,在变量值一栏加入以下四个路径,每个路径之间用分号;隔开(和原本存在的路径也要用分号隔开):

D:\openCV\build\include

D:\openCV\BuildWithTBB\bin\Debug

D:\openCV\BuildWithTBB\bin\Release

D:\openCV\tbb42_20131003oss\lib\ia32\Debug

D:\openCV\tbb42_20131003oss\lib\ia32\Release

项目设置

然后打开VS2013,新建一个空项目,在属性管理器中右键“Debug | Win32”->添加新项目属性表

修改项目属性表的名字,名字改成什么没有限制,但注意不要修改后缀名

点击“添加”后,即可在属性管理器中见到我们新建的属性表

右键点击我们刚建立的属性表,点击“属性”,或者直接双击,

在弹出的窗口中点击“VC++目录”,点击右侧的“包含目录”,添加

D:\openCV\build\include

同样地,在“库目录”添加

D:\openCV\BuildWithTBB\lib\Debug

 

 

点开“链接器”->输入->附加依赖项,按照需要添加相应的库文件,由于测试程序比较简单,所以我们只需要用到一个库文件opencv_highgui246d.lib。

这里是所有之前生成的库文件(Debug版)

 

用同样的方式,向“Release | Win32”属性中添加属性表,并对属性表进行配置。

“包含目录”添加

D:\openCV\build\include

向“库目录”添加

D:\openCV\BuildWithTBB\lib\Release

向“附加依赖项”添加

D:\openCV\BuildWithTBB\lib\Release

下的库文件。

注意:Release文件夹下的库文件和Debug文件夹下的相比,文件名末尾少了个d,例如,下文中示例程序所使用的库文件的debug版为opencv_highgui246d.lib,而release版则为opencv_highgui246.lib。

这里配置可能跟网上找的别的教程不大一样,网上大多数是直接修改“Debug | Win32”以及“Release | Win32”的属性,这样也是可以,但这样一来每次新建一个需要使用OpenCV的项目就需要重新配置一次,而按照上文所说的方法,我们把和OpenCV相关的属性保存在项目属性表里,则可以在其他项目中反复引用(选择“添加现有属性表”即可),不需要再进行繁杂的配置工作,而且项目到底引用了那些库也可以一目了然了。

 

测试

配置完成后,我们在项目中添加一个cpp文件,输入以下代码:

#include <opencv\highgui.h>

 

int main()

{

   IplImage *img;

   img = cvLoadImage("D:\\openCV\\samples\\cpp\\lena.jpg");

   if (img)

   {

      cvNamedWindow("pic", CV_WINDOW_AUTOSIZE);

      cvShowImage("pic", img);

      cvWaitKey(0);

   }

 

   return 0;

}

代码的作用是加载D:\openCV\samples\cpp目录下一张文件名为lena.jpg的图片并显示出来,效果如下图所示。

 

 

 

附录

文中涉及的软件下载地址

OpenCV源码包

http://opencv.org/downloads.html

TBB

https://www.threadingbuildingblocks.org/download

CMake

http://www.cmake.org/cmake/resources/software.html



(可忽略TBB和CMake)

0 0