摘要:本文介绍了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 GCC版本_vs2010 c语言开发环境变量

从官网下载OpenCV

五、解压源码

将下载到的压缩包解压到任意目录下,文件结构形如:

opencv GCC版本_Visual_02

OpenCV分发包解压后的文件结构

在同一目录下新建build_64和msvc_2010_64两个文件夹,前者作为Cmake编译是用到的临时目录,后者作为保存编译结果的目录,文件结构如图所示:

opencv GCC版本_vs2010 c语言开发环境变量_03

在OpenCV 3.3.0分发包中创建编译目录

六、下载并安装CMake

七、使用CMake进行配置

1、打开CMake,设置好source code目录和build目录:

opencv GCC版本_opencv GCC版本_04

设置CMake的编译目录

2、点击Configure按钮,选择相应的Visual Studio版本,这里选择的是Visual Studio 10 2010 Win64,如图所示:

opencv GCC版本_Visual_05

设置CMake的目标环境

3、点击Finish,即开始配置过程(配置过程需要一段时间,注意保证网络的畅通,配置过程中需要下载第三方库),直到配置成功完成:

opencv GCC版本_opencv GCC版本_06

CMake配置

4、初步配置完成后,将CMAKE_INSTALL_PREFIX修改成之前创建的msvc2010_64目录,该目录中包含编译生成VC10下相关库的VS工程;

5、点击Add Entry按钮,添加CMAKE_DEBUG_POSTFIX选项,值设为字符串类型的“d”,用于区分debug和release版本:

opencv GCC版本_OpenCV_07

CMake配置

6、设置完上述两点后,再次点击Configure按钮,配置完成后点击Generate生成用于真正完成编译工作的Visual Studio工程:

opencv GCC版本_vs2010 c语言开发环境变量_08

CMake配置完成

八、Visual Studio 2010下编译OpenCV源码

1、经过上一步后,我们在build_64目录下即可看到CMake生成的用于编译生成VC10下相关库的Visual Studio工程了,如下图所示:

opencv GCC版本_CMake_09

CMake生成的Visual Studio工程

用Visual Studio 2010打开OpenCv.sln,显示“正在分析解决方案中的文件…”,耐心等待解析完成:

opencv GCC版本_OpenCV_10

打开OpenCV的编译工程

2、在解决方案上点击右键->属性,使用“配置管理器”将编译环境将平台选为x64,若无此选项则点击配置管理器选择X64平台;若没有x64则新建一个x64平台即可:

opencv GCC版本_OpenCV_11

设置OpenCV编译工程为x64

3、先在Debug环境下对工程进行编译,解决方案上点击右键->生成解决方案,耐心等待编译完成:

opencv GCC版本_CMake_12

在Visual Studio中编译源码

4、编译完成后,将INSTALL设置为启动工程(在INSTALL项目点击右键->“设为启动项目”):

opencv GCC版本_Visual_13

在Visual Studio中编译OpenCV的INSTALL工程

然后进行安装(生成->仅用于项目->仅生成Install):

opencv GCC版本_CMake_14

在Visual Studio中编译OpenCV的INSTALL工程

5、再在Release环境下进行编译和安装(和Debug类似),不再赘述。

八、设置环境变量

安装完成后,在msvs2010_64目录下可以看到一个include文件夹和x64文件夹,与官网分发包中自带的vs14目录结构类似:

opencv GCC版本_OpenCV_15

OpenCV从源码编译后生成的目录结构

我们可以在自己所编译出的在x64目录下逐级找到bin文件夹,将OpenCV的可执行文件(主要是动态链接库)所在的目录加入Path环境变量:

opencv GCC版本_opencv GCC版本_16

设置OpenCV环境变量

部分系统下,在环境变量修改后可能需要注销当前Windows用户(或重启)后重新登陆才能生效。如果不设置环境变量,在运行时可能出现“无法启动此程序,因为计算机中丢失opencv_core330d.dll。尝试重新安装该程序以解决此问题”的错误:

opencv GCC版本_vs2010 c语言开发环境变量_17

未正确配置OpenCV环境变量导致的错误

四、在Visual Studio 2010中配置OpenCV 3.3.0开发环境

本文示例使用的Visual Studio版本如下所示:

opencv GCC版本_Visual_18

本文使用的Visual Stuido 2010(VC10)版本

创建一个示例工程,控制台应用程序,VCR_exe:

opencv GCC版本_vs2010 c语言开发环境变量_19

新建一个OpenCV示例工程

1、配置头文件路径

用于指定Visual Studio在什么地方寻找OpenCV的头文件。打开Visual Studio 2010,选择菜单“项目”->“** 属性”:

opencv GCC版本_CMake_20

项目属性

在其中找到“配置属性”->“VC++目录”->“包含目录”,向其中增加三个目录:

F:\opencv\msvc_2010_64\include\include;

F:\opencv\msvc_2010_64\include\opencv;

F:\opencv\msvc_2010_64\include\opencv2;

opencv GCC版本_vs2010 c语言开发环境变量_21

在Visual Studio中设置OpenCV头文件目录

2、配置静态链接库文件路径

用于指定Visual Studio在什么地方寻找OpenCV的库文件。

将库目录加入到“工具”->“选项”->“项目和解决方案”->“VC++目录”->“库目录” 中,如下图所示:

opencv GCC版本_CMake_22

在Visual Studio中设置OpenCV库文件路径

3、配置附加依赖项

用于指定所使用的静态链接库,如果不指定则会在链接时报找不到形如“error LNK2001: 无法解析的外部符号”、“error LNK2019: 无法解析的外部符号 cvBoundingRect,该符号在函数*中被引用”等的错误,如下图所示:

opencv GCC版本_CMake_23

缺少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

opencv GCC版本_opencv GCC版本_24

在Viusal Studio中增加OpenCV的附加依赖项

4、如有必要修改编译环境为x64

在打开部分已经存在的项目或默认使用的是Win32时,通过“配置管理器”将编译环境修改为x64,如下图所示(如果没有x64则通过“新建”新建一个即可):

opencv GCC版本_opencv GCC版本_25

在Visual Studio中设置OpenCV x64的编译环境

五、使用如下的代码验证OpenCV开发环境的可用性

opencv GCC版本_Visual_26

OpenCV测试代码

如果环境正常则将出现如下的输出:

opencv GCC版本_OpenCV_27

OpenCV开发环境正常时的输出