摘要:本文介绍了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](http://www.meilongkui.com/wp-content/uploads/2017/09/DownloadOpenCV-1-1024x489.png)
从官网下载OpenCV
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/ebdbfe93dd9e43a2b5b0f77dff289acf/be%29xoc19u6%5Bf.png)
将下载到的压缩包解压到任意目录下,文件结构形如:
![OpenCV分发包解压后的文件结构](http://www.meilongkui.com/wp-content/uploads/2017/09/FileStructureOfOpenCV.png)
OpenCV分发包解压后的文件结构
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/54326c9c6eb0464a84decbb6104781cb/e%2926wnt%60j9zx.png)
在同一目录下新建build_64和msvc_2010_64两个文件夹,前者作为Cmake编译是用到的临时目录,后者作为保存编译结果的目录,文件结构如图所示:
![在OpenCV 3.3.0分发包中创建编译目录](http://www.meilongkui.com/wp-content/uploads/2017/09/MakeBuildDirectory.png)
在OpenCV 3.3.0分发包中创建编译目录
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/8beb5d514a7a4d6b932a285602bc2622/%60r%28%28ci1%7Dzg_h.png)
六、下载并安装CMake
从官网下载CMake并安装,注意使用64位版本,笔者使用的是https://cmake.org/files/v3.9/cmake-3.9.2-win64-x64.msi。
七、使用CMake进行配置
1、打开CMake,设置好source code目录和build目录:
![设置CMake的编译目录](http://www.meilongkui.com/wp-content/uploads/2017/09/CMakeSetBuildPath.png)
设置CMake的编译目录
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/faa9ddee777a40d18562c00f01af3ff9/sj%60ofneb3uy3.png)
2、点击Configure按钮,选择相应的Visual Studio版本,这里选择的是Visual Studio 10 2010 Win64,如图所示:
![设置CMake的目标环境](http://www.meilongkui.com/wp-content/uploads/2017/09/CMakeTargetConfiguration.png)
设置CMake的目标环境
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/f570fa35d1d04eb68b695b162a967add/1jal4%25_x%609%284.png)
3、点击Finish,即开始配置过程(配置过程需要一段时间,注意保证网络的畅通,配置过程中需要下载第三方库),直到配置成功完成:
![CMake配置](http://www.meilongkui.com/wp-content/uploads/2017/09/CMakeConfigurationDone.png)
CMake配置
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/de672595711f4fda9d3e6cc2f48f486b/anka%24h74qamr.png)
4、初步配置完成后,将CMAKE_INSTALL_PREFIX修改成之前创建的msvc2010_64目录,该目录中包含编译生成VC10下相关库的VS工程;
5、点击Add Entry按钮,添加CMAKE_DEBUG_POSTFIX选项,值设为字符串类型的“d”,用于区分debug和release版本:
![CMake配置](http://www.meilongkui.com/wp-content/uploads/2017/09/CmakeDebugConfiguration.png)
CMake配置
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/306113a2cefc40e085cf0a8ccc13b4fa/d%7Ep%7D%296qdrn4f.png)
6、设置完上述两点后,再次点击Configure按钮,配置完成后点击Generate生成用于真正完成编译工作的Visual Studio工程:
![CMake配置完成](http://www.meilongkui.com/wp-content/uploads/2017/09/GenerationDone.png)
CMake配置完成
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\_LHB%60%252QPQ_0%5D%5DI%24%5DI(T%258E.png)
八、Visual Studio 2010下编译OpenCV源码
1、经过上一步后,我们在build_64目录下即可看到CMake生成的用于编译生成VC10下相关库的Visual Studio工程了,如下图所示:
![CMake生成的Visual Studio工程](http://www.meilongkui.com/wp-content/uploads/2017/09/VisualStudioMakeProject.png)
CMake生成的Visual Studio工程
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/365a81bed87948dabb16696b0b985e7a/j%60w_v%7D%7Bf6%60%25x.png)
用Visual Studio 2010打开OpenCv.sln,显示“正在分析解决方案中的文件…”,耐心等待解析完成:
![打开OpenCV的编译工程](http://www.meilongkui.com/wp-content/uploads/2017/09/OpenOpenCVBuildProject-1024x513.png)
打开OpenCV的编译工程
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/9140ece2628448c2acdd20a3b49e9979/qq%E5%9B%BE%E7%89%8720170910122007.png)
2、在解决方案上点击右键->属性,使用“配置管理器”将编译环境将平台选为x64,若无此选项则点击配置管理器选择X64平台;若没有x64则新建一个x64平台即可:
![设置OpenCV编译工程为x64](http://www.meilongkui.com/wp-content/uploads/2017/09/ChooseBuildProjectEnviroment-1024x523.png)
设置OpenCV编译工程为x64
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\8%60IPWKD%4099)0BAZ6Y20O6LM.png)
3、先在Debug环境下对工程进行编译,解决方案上点击右键->生成解决方案,耐心等待编译完成:
![在Visual Studio中编译源码](http://www.meilongkui.com/wp-content/uploads/2017/09/VisualStudioMake-1024x513.png)
在Visual Studio中编译源码
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\D88N%7D3FAI1A%25SIB1S%7BF7X~A.png)
4、编译完成后,将INSTALL设置为启动工程(在INSTALL项目点击右键->“设为启动项目”):
![在Visual Studio中编译OpenCV的INSTALL工程](http://www.meilongkui.com/wp-content/uploads/2017/09/MakeInstallProject.png)
在Visual Studio中编译OpenCV的INSTALL工程
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\T%25S%25)4NZK%60~BU%5DVRBBXZ0%60P.png)
然后进行安装(生成->仅用于项目->仅生成Install):
![在Visual Studio中编译OpenCV的INSTALL工程](http://www.meilongkui.com/wp-content/uploads/2017/09/MakeInstall-1024x504.png)
在Visual Studio中编译OpenCV的INSTALL工程
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\J_XF~P%5DCTGGFA9FY3T0IGVD.png)
5、再在Release环境下进行编译和安装(和Debug类似),不再赘述。
八、设置环境变量
安装完成后,在msvs2010_64目录下可以看到一个include文件夹和x64文件夹,与官网分发包中自带的vs14目录结构类似:
![OpenCV从源码编译后生成的目录结构](http://www.meilongkui.com/wp-content/uploads/2017/09/SelfBuildFileStructure.jpeg)
OpenCV从源码编译后生成的目录结构
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/468e47c5e68342f39306edfb48691b89/h3hv1p%292v3f.jpeg)
我们可以在自己所编译出的在x64目录下逐级找到bin文件夹,将OpenCV的可执行文件(主要是动态链接库)所在的目录加入Path环境变量:
![设置OpenCV环境变量](http://www.meilongkui.com/wp-content/uploads/2017/09/SetEnviromentVariableForOpenCV-1.png)
设置OpenCV环境变量
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\9Z3H0JKX%60F%5BT50MPH_URN_E.png)
部分系统下,在环境变量修改后可能需要注销当前Windows用户(或重启)后重新登陆才能生效。如果不设置环境变量,在运行时可能出现“无法启动此程序,因为计算机中丢失opencv_core330d.dll。尝试重新安装该程序以解决此问题”的错误:
![未正确配置OpenCV环境变量导致的错误](http://www.meilongkui.com/wp-content/uploads/2017/09/ErrorEnviroment.png)
未正确配置OpenCV环境变量导致的错误
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\S~I205J5HKQ(1((SIW_N)AY.png)
四、在Visual Studio 2010中配置OpenCV 3.3.0开发环境
本文示例使用的Visual Studio版本如下所示:
![本文使用的Visual Stuido 2010(VC10)版本](http://www.meilongkui.com/wp-content/uploads/2017/09/VersionInformationOfVisualStuido-1024x511.png)
本文使用的Visual Stuido 2010(VC10)版本
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/a2fe5e0fa16d4e72ab8acddbd73b80ce/qq%E5%9B%BE%E7%89%8720170910102930.png)
创建一个示例工程,控制台应用程序,VCR_exe:
![新建一个OpenCV示例工程](http://www.meilongkui.com/wp-content/uploads/2017/09/NewOpenCvProject.png)
新建一个OpenCV示例工程
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\%24N%60EN%60ZC~O%5BB2X_IMI1SWHY.png)
1、配置头文件路径
用于指定Visual Studio在什么地方寻找OpenCV的头文件。打开Visual Studio 2010,选择菜单“项目”->“** 属性”:
![项目属性](http://www.meilongkui.com/wp-content/uploads/2017/09/ProjectProperty.png)
项目属性
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/b605abee6def4ed288525f7029d7b212/9%7Baprf2qo_ys.png)
在其中找到“配置属性”->“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头文件目录](http://www.meilongkui.com/wp-content/uploads/2017/09/SelfBuildOpenCVIncludeFilePath.png)
在Visual Studio中设置OpenCV头文件目录
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\G%5D9B0(MTJL0(6V3X3S%7BSQ%7D2.png)
2、配置静态链接库文件路径
用于指定Visual Studio在什么地方寻找OpenCV的库文件。
将库目录加入到“工具”->“选项”->“项目和解决方案”->“VC++目录”->“库目录” 中,如下图所示:
![在Visual Studio中设置OpenCV库文件路径](http://www.meilongkui.com/wp-content/uploads/2017/09/LibarayFilePath.png)
在Visual Studio中设置OpenCV库文件路径
![](file:///C:\Users\mlkui\AppData\Roaming\Tencent\Users\79550501\QQ\WinTemp\RichOle\1Q824ZA)DR0V%60%40%5D~1JNI~AT.png)
3、配置附加依赖项
用于指定所使用的静态链接库,如果不指定则会在链接时报找不到形如“error LNK2001: 无法解析的外部符号”、“error LNK2019: 无法解析的外部符号 cvBoundingRect,该符号在函数*中被引用”等的错误,如下图所示:
![缺少OpenCV附加依赖项导致的链接错误](http://www.meilongkui.com/wp-content/uploads/2017/09/LinkError.png)
缺少OpenCV附加依赖项导致的链接错误
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/a0fdd59a4d6b4be2b2eaed91607646e9/szr%7Bsb0%5Bt%5B3o.png)
在“项目”->“** 属性”->“配置属性”->“链接器”->“输入”->“附加依赖项”中加入编译出的如下静态链接库: 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的附加依赖项](http://www.meilongkui.com/wp-content/uploads/2017/09/SelfBuildAddtionalDependency.png)
在Viusal Studio中增加OpenCV的附加依赖项
4、如有必要修改编译环境为x64
在打开部分已经存在的项目或默认使用的是Win32时,通过“配置管理器”将编译环境修改为x64,如下图所示(如果没有x64则通过“新建”新建一个即可):
![在Visual Studio中设置OpenCV x64的编译环境](http://www.meilongkui.com/wp-content/uploads/2017/09/BuilidEnviroment.png)
在Visual Studio中设置OpenCV x64的编译环境
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/5a59524c3530495e9e57bb2e10c66420/dijgijv2%24%7Elv.png)
五、使用如下的代码验证OpenCV开发环境的可用性
![OpenCV测试代码](http://www.meilongkui.com/wp-content/uploads/2017/09/TestCodeOfOpenCV.png)
OpenCV测试代码
![](C:/Users/mlkui/AppData/Local/YNote/data/mlkui@163.com/2c0859e0fa8d48ef81d746d3c261f829/lf6rq5i%7E3u%7Bm.png)
如果环境正常则将出现如下的输出:
![OpenCV开发环境正常时的输出](http://www.meilongkui.com/wp-content/uploads/2017/09/DemoOutput-1024x565.png)
OpenCV开发环境正常时的输出
转载时请保留出处,违法转载追究到底:进城务工人员小梅 » Win7 64位环境下OpenCV 3.3.0源码编译及VS2010(VS10)下开发