Win8(win7) x64位OS + VS2012 + OpenCV2.4.5 + CMake2.8 + TBB42自己编译OpenCV

来源:互联网 发布:织梦cms视频安装教程 编辑:程序博客网 时间:2024/06/06 04:19

注:本文主要参考自Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV

这段时间因为学习的需要研究OpenCV里的一些视觉算法,为了方便调试查看OpenCV的源码需要自己编译OpenCV,遂网上查找各种资料,这里记下主要的步骤以便以后万一需要查看。主要

对OpenCv重新主要是为了得到相应的Debug版本和Release版本的DLL,Lib和相应的头文件,这样就可以在调试代码的时候进入源码内部调试执行了。如果仅仅使用OpenCv进行直接的开发,则可以直接使用OpenCV安装包内部已经编译好的Dll进行开发即可。下面记录重编译的主要步骤:


一.下载相应的安装包并自定义安装

本机的开发环境已经在标题中给出,不过有一点嗷注意:虽然本人的OS是64位的,但鉴于通用性,这里只采用32位的编译模式,这也是VS等开发工具在64位机器上默认的编译选项。

各必须软件可以在以下链接下载,如有变动可以重新百度:

下载OpenCV2.4.5:http://sourceforge.net/projects/opencvlibrary/files/,打开后选择Windows版本,并下载相应版本的OpenCV。2.4.5版本大小大概265M

下载CMake2.8.11:http://www.cmake.org/cmake/resources/software.html,下载Windows安装版本

下载tbb42_20130725oss_win:https://www.threadingbuildingblocks.org/download

下完后进行相应的安装。这里的安装其实基本等同于解压缩,我这里的安装路径是:

OpenCV: F:\History\OpenCV245\opencv

CMake: D:\Program Files (x86)\CMake 2.8(这个其实无所谓)

TBB: F:\History\OpenCV245\tbb42_20130725oss(与OpenCV放在同级目录下,你也可以自己选地方)


二. 配置环境变量

注:这一步应该放到第四步完成编译之后。

这里配置环境变量需要根据你自己的OpenCV安装路径和TBB路径自己修改。根据我前面的安装位置,我的环境变量配置应该是这样的:

Path变量(没有就新建一个。我一般配到用户环境变量里,这样理论上不会对别的用户造成影响,虽然个人PC用户其实就我自己一个人啦,哈哈)

Path: F:\History\OpenCV245\opencv\vc11x86\bin

如果你需要用TBB(我这里默认你用,如果你不需要,可以下面这一小步你就不用关心了),那么最好也添加TBB的bin目录到Path里,加完后Path环境变量里应该有两个路径,类似这样,用分号隔开:

F:\History\OpenCV245\opencv\vc11x86\bin;F:\History\OpenCV245\tbb42_20130725oss\bin\ia32\vc11

这里的TBB的Bin目录下有两个文件夹: ia32和intel64,应该选 ia32,因为我们是32位的编译模式;进入ia32后,还会有VS版本的选择,如果是用于VS2012就选vc11了。


三. 使用CMake编译生成自己的OpenCV项目

注意:CMake本身不会生成Dll和Lib,刚开始我不明白,还以为这里直接就生需要的Dll和Lib,大家莫见笑。

用CMake可以生成供VS2012使用的OpenCV项目(sln),这样就可以在VS2012里采用Debug和Release模式生成相应的Dll和Lib了。

为了存放生成的VS项目,新建文件夹:F:\History\OpenCV245\OpencvProject

打开CMake,在source code栏和binaries栏中浏览路径到你的OpenCV安装路径和新建的VS项目存放路径,我的如图:

CMake路径选择

这里应该确保OpenCV的路径应该选择到有“CMakeLists.txt”文件所在的层级:

OpenCV目录结构

选好两个路径后,点击Configure,选择Visual Studio 11,下面选择默认本地编译器(usedefault  native compilers)就好,选完点击Finish确认:

编译选项

之后如果没严重问题CMake应该就会自动开始配置了,这里需要耐心等一会儿进度条走完。之后,CMake会给出一些生成VS工程选项,根据需要,这里在默认的基础上需要额外勾选WITH_TBB选项。另外,我这里为了看一些OpenCV里自带的样例的效果,还选择了编译Example:BUILD_EXAMPLE,这样在生成的工程里就会有编译好的例子,有的效果还蛮酷的^_^。

编译选项

之后再次点击Cinfigure,会让你选择TBB的路径。这里就需要输入TBB所在的路径了,我在这里输入:F:\History\OpenCV245\tbb42_20130725oss\include,第二个ANT红色警告现在不必管它,填好后如下:

TBB路径

再次点击Configure,应该还会有一次红色警告如下。这次什么都不用改,直接再次Configure:

再次Configure

之后继续Configure,在确保没有红色警告后,就可以点击Generate生成OpenCV工程了。完成之后退出CMake

生成


四. 用VS2012编译生成的OpenCV项目,生成相应的链接库

如果上面几步都没有问题,那么这个时候你就应该可以在自己新建的OpenCV项目目录(F:\History\OpenCV245\OpencvProject)下找到生成的OpenCV项目了。点击OpenCV.sln,用VS2012打开工程:

OpenCV的VS2012工程

先在Debug模式下,选中CMakeTargets项目下的INSTALL工程,右键单击选择生成(Build),开始生成Debug版本的Dll和lib库文件。这个过程视机器性能的差异时间略有不同,不过一般都需要10分钟以上。

完成后,切换到Release模式下再重复一遍以上操作生成Release版本的库文件。


这两步需要的时间都很久,而且会消耗大量的CPU,所以可以选择在机器比较空闲的时候做(不过这话在这里说得有点晚了)。完成后,就可以在你的OpenCV工程目录下找到相应的库文件,其目录结构如下:


其中,bin目录中包含了需要的所有Debug版本和Release版的dll文件,include目录包含相应的头文件,lib则包含对应的lib文件,跟dll关联的源代码在Opencv安装目录F:\History\OpenCV245\opencv\modules。另外,这里如果你在前面的CMake编译选项中勾选了BUILD_EXAMPLE,那么这里还会有一个samples文件夹,主要是OpenCV自带的一些小例子。

为了方便管理和区分版本,可以将F:\History\OpenCV245\OpencvProject\install拷贝到F:\History\OpenCV245\opencv下,并将install重命名为vc11x86。而此时F:\History\OpenCV245\OpencvProject没有用了,但是不能删除,否则无法跟踪源码,占用6G多空间,可以通过VS2012的“清理解决方案”来减到3G多。


五. 编写测试工程

打开VS2012,新建控制台应用程序,命名为OpenCVProject,并选择新建空项目。之后在项目上右键属性,配置项目属性。

5.1配置包含目录和库目录

VC++目录->包含目录,添加F:\History\OpenCV245\opencv\vc11x86\include

VC++目录->库目录,添加F:\History\OpenCV245\opencv\vc11x86\lib

VC++

链接器->输入->附加依赖项,添加lib文件名列表如下图。

lib

在Debug模式下的配置如下:

opencv_calib3d245d.libopencv_contrib245d.libopencv_core245d.libopencv_features2d245d.libopencv_flann245d.libopencv_gpu245d.libopencv_highgui245d.libopencv_imgproc245d.libopencv_legacy245d.libopencv_ml245d.libopencv_nonfree245d.libopencv_objdetect245d.libopencv_photo245d.libopencv_stitching245d.libopencv_superres245d.libopencv_ts245d.libopencv_video245d.libopencv_videostab245d.libtbb_debug.lib

对于Release配置,添加:

opencv_calib3d245.libopencv_contrib245.libopencv_core245.libopencv_features2d245.libopencv_flann245.libopencv_gpu245.libopencv_highgui245.libopencv_imgproc245.libopencv_legacy245.libopencv_ml245.libopencv_nonfree245.libopencv_objdetect245.libopencv_photo245.libopencv_stitching245.libopencv_superres245.libopencv_ts245.libopencv_video245.libopencv_videostab245.libtbb.lib

两者的区别仅从名字上看就相差后缀d,带d的均为Debug版本,不带d的是release版。这里如果你没有添加TBB,那么在Debug下不需要添加最后的tbb_debug.lib,release下也不需要tbb.lib。另外,假如前面在配置环境变量的时候没有在Path变量下添加TBB路径,那么也可以直接将TBB的include\bin目录下的tbb.dll和tbb_debug.dll拷贝到OpenCV的bin目录下,同时将TBB的include\lib目录下的tbb.lib和tbb_debug.lib拷贝到OpenCV的lib目录下

5.3    添加测试代码

修改TestOpencv.cpp,代码为:

#include "opencv2\opencv.hpp"using namespace cv;using namespace std;int main(){Mat img = imread("c:/pp.jpg");if(img.empty()){cout<<"error";return -1;}imshow("pp的靓照",img);waitKey();return 0;}
将要显示的图片保存为c:/pp.jpg编译运行,显示出图片。
原创粉丝点击