摘要:本文介绍了Win7 64位环境下OpenCV 3.3.0从源码开始进行编译并在VS2010(VS10)下开发的全过程,OpenCV 3.3.0的源码除VS10外,还有针对包括VS11、VS12、VS13、VS14等等各种环境的配置选项,本文的步骤也基本同样适用。
一、VS的版本关系
VC10,对应VS2010
VC11,对应VS2012
VC12,对应VS2013
VC14,对应VC2015。
二、为什么要从源码编译
1、OpenCV 3.3.0默认的是带有针对VC14的库,需要用于除VC14外的其他运行时环境;
2、OpenCV 3.3.0默认只带有一个最基础的opencv_world330.lib,在开发中需要用到其他模块;
3、需要进行源码级别的修改;
三、Win7 64位环境下OpenCV 3.3.0在VS2010(VS10)中简单使用的配置
如果只用到基本功能,在已经安装了VS14运行时环境的前提下,无需编译即可使用,参见本博客中的《Win7 64位环境下OpenCV 3.3.0在VS2010(VS10)中简单使用的配置》。如果需要从源码编译或使用除基本模块外的其他功能,可以参照以下的步骤进行。
四、从官网下载源码
从官网下载包含源码的发行包(opencv-3.3.0-vc14.exe):
从官网下载OpenCV
五、解压源码
将下载到的压缩包解压到任意目录下,文件结构形如:
OpenCV分发包解压后的文件结构
在同一目录下新建build_64和msvc_2010_64两个文件夹,前者作为Cmake编译是用到的临时目录,后者作为保存编译结果的目录,文件结构如图所示:
在OpenCV 3.3.0分发包中创建编译目录
六、下载并安装CMake
七、使用CMake进行配置
1、打开CMake,设置好source code目录和build目录:
设置CMake的编译目录
2、点击Configure按钮,选择相应的Visual Studio版本,这里选择的是Visual Studio 10 2010 Win64,如图所示:
设置CMake的目标环境
3、点击Finish,即开始配置过程(配置过程需要一段时间,注意保证网络的畅通,配置过程中需要下载第三方库),直到配置成功完成:
CMake配置
4、初步配置完成后,将CMAKE_INSTALL_PREFIX修改成之前创建的msvc2010_64目录,该目录中包含编译生成VC10下相关库的VS工程;
5、点击Add Entry按钮,添加CMAKE_DEBUG_POSTFIX选项,值设为字符串类型的“d”,用于区分debug和release版本:
CMake配置
6、设置完上述两点后,再次点击Configure按钮,配置完成后点击Generate生成用于真正完成编译工作的Visual Studio工程:
CMake配置完成
八、Visual Studio 2010下编译OpenCV源码
1、经过上一步后,我们在build_64目录下即可看到CMake生成的用于编译生成VC10下相关库的Visual Studio工程了,如下图所示:
CMake生成的Visual Studio工程
用Visual Studio 2010打开OpenCv.sln,显示“正在分析解决方案中的文件…”,耐心等待解析完成:
打开OpenCV的编译工程
2、在解决方案上点击右键->属性,使用“配置管理器”将编译环境将平台选为x64,若无此选项则点击配置管理器选择X64平台;若没有x64则新建一个x64平台即可:
设置OpenCV编译工程为x64
3、先在Debug环境下对工程进行编译,解决方案上点击右键->生成解决方案,耐心等待编译完成:
在Visual Studio中编译源码
4、编译完成后,将INSTALL设置为启动工程(在INSTALL项目点击右键->“设为启动项目”):
在Visual Studio中编译OpenCV的INSTALL工程
然后进行安装(生成->仅用于项目->仅生成Install):
在Visual Studio中编译OpenCV的INSTALL工程
5、再在Release环境下进行编译和安装(和Debug类似),不再赘述。
八、设置环境变量
安装完成后,在msvs2010_64目录下可以看到一个include文件夹和x64文件夹,与官网分发包中自带的vs14目录结构类似:
OpenCV从源码编译后生成的目录结构
我们可以在自己所编译出的在x64目录下逐级找到bin文件夹,将OpenCV的可执行文件(主要是动态链接库)所在的目录加入Path环境变量:
设置OpenCV环境变量
部分系统下,在环境变量修改后可能需要注销当前Windows用户(或重启)后重新登陆才能生效。如果不设置环境变量,在运行时可能出现“无法启动此程序,因为计算机中丢失opencv_core330d.dll。尝试重新安装该程序以解决此问题”的错误:
未正确配置OpenCV环境变量导致的错误
四、在Visual Studio 2010中配置OpenCV 3.3.0开发环境
本文示例使用的Visual Studio版本如下所示:
本文使用的Visual Stuido 2010(VC10)版本
创建一个示例工程,控制台应用程序,VCR_exe:
新建一个OpenCV示例工程
1、配置头文件路径
用于指定Visual Studio在什么地方寻找OpenCV的头文件。打开Visual Studio 2010,选择菜单“项目”->“** 属性”:
项目属性
在其中找到“配置属性”->“VC++目录”->“包含目录”,向其中增加三个目录:
F:\opencv\msvc_2010_64\include\include;
F:\opencv\msvc_2010_64\include\opencv;
F:\opencv\msvc_2010_64\include\opencv2;
在Visual Studio中设置OpenCV头文件目录
2、配置静态链接库文件路径
用于指定Visual Studio在什么地方寻找OpenCV的库文件。
将库目录加入到“工具”->“选项”->“项目和解决方案”->“VC++目录”->“库目录” 中,如下图所示:
在Visual Studio中设置OpenCV库文件路径
3、配置附加依赖项
用于指定所使用的静态链接库,如果不指定则会在链接时报找不到形如“error LNK2001: 无法解析的外部符号”、“error LNK2019: 无法解析的外部符号 cvBoundingRect,该符号在函数*中被引用”等的错误,如下图所示:
缺少OpenCV附加依赖项导致的链接错误
在“项目”->“** 属性”->“配置属性”->“链接器”->“输入”->“附加依赖项”中加入编译出的如下静态链接库: opencv_calib3d330d.lib
opencv_core330d.lib
opencv_dnn330d.lib
opencv_features2d330d.lib
opencv_flann330d.lib
opencv_highgui330d.lib
opencv_imgcodecs330d.lib
opencv_imgproc330d.lib
opencv_ml330d.lib
opencv_objdetect330d.lib
opencv_photo330d.lib
opencv_shape330d.lib
opencv_stitching330d.lib
opencv_superres330d.lib
opencv_video330d.lib
opencv_videoio330d.lib
opencv_videostab330d.lib
在Viusal Studio中增加OpenCV的附加依赖项
4、如有必要修改编译环境为x64
在打开部分已经存在的项目或默认使用的是Win32时,通过“配置管理器”将编译环境修改为x64,如下图所示(如果没有x64则通过“新建”新建一个即可):
在Visual Studio中设置OpenCV x64的编译环境
五、使用如下的代码验证OpenCV开发环境的可用性
OpenCV测试代码
如果环境正常则将出现如下的输出:
OpenCV开发环境正常时的输出