Windows下利用CMake和VS2013编译OpenCV
转载自:http://www.chengxulvtu.com/2014/03/19/windows_build-opencv-with-cmake-and-vs2013.html
获取OpenCV有两种途径,一是预编译好的库,二是下载源代码自己编译。OpenCV官网http://opencv.org/提供

下载的OpenCV既包含编译好的库,也包含源代码。通过OpenCV官网右上角的彩带,可以获取托管在GitHub上的OpenCV最新源代码。本篇博文就是利用CMake和VS2013编译GitHub上获取的最新源代码。
先来说一下自己编译的好处。
- 由于获取的是最新源代码,所以可以在OpenCV发布某个版本之前利用集成进来的高级功能;
- 自己编译可以在程序调试时跟踪源码;
- 预编译的库不包含一些功能,比如TBB,如果想使用这些功能只能自己动手了。
总之,应了那句俗话:自己动手,丰衣足食。
编译源代码用到的工具包括:VS2013、CMake、Git工具(TortoiseGit),TBB(如果需要包含进来的话)。
一、使用CMake生成VS2013的OpenCV解决方案
- 利用TortoiseGit获取最新的OpenCV源代码,放在C:\OpenCVLatest。
- 在OpenCVLatest目录下新建目录build\vs2013x64,用于放置生成的解决方案和编译好的库。
- 打开CMake,在Where is the source code后面的文本框选择OpenCV的源代码,Where to build the binaries选择第2步新建的文件夹vs2013x64,如下图所示:
![20140319201930]()
- 点击“Configure”按钮,在弹出的对话框中,选择“Visual Studio 12 Win64”,使用默认的本地编译器,如下图所示:
![20140319201955]()
- 点击“Finish”之后,等待配置完成,如下图所示:
![20140319202209]()
- 找到WITH_TBB,勾选:
![20140319202244]()
- 再次点击“Configure”按钮,配置完成出现红色标记,修改TBB_INCLUDE_DIRS的Value为:C:\OpenCVLatest\tbb42_20140122oss_win\tbb42_20140122oss\include
![20140319202342]()
- 再次点击“Configure”按钮,会出现如下所示:
![20140319202425]()
- 这个地方需要注意一下,因为生成的Value值到intel64,这里需要修改为intel64/vc12,对应vs2013,如下图所示:
![20140319202519]()
- 再次点击“Configure”按钮,这时就没有红色标记出现了,点击“Generate”按钮,生成OpenCV的解决方案。
二、VS2013编译OpenCV解决方案生成库(这一步很重要,不然只有库没有集成的头文件也是很蛋疼的)
- 打开OpenCV的解决方案,右击CMakeTargets下的INSTALL,选择“生成”,生成Debug版的dll和lib,如下图所示:
![20140319202757]()
- 修改配置为“Release”,重复步骤1,生成Release版的dll和lib,如下图所示:
![20140319202844]()
- 生成完毕,在OpenCV解决方案下的install文件夹里就有了dll,lib和h头文件了。
![20140319211301]()
- 虽然生成了库文件了,如果可以Debug跟踪源码,还得保留OpenCV解决方案。
三、生成过程中遇到的错误
通过CMake生成解决方案的过程中由于不仔细,导致后面生成时遇到了一些error LNK1104错误,比如说无法打开opencv_core300d.lib,无法打开tbb_debug.lib之类。原因就是在指定的目录找不到这些文件,其实出现这些问题的根本原因是在配置TBB的时候配置错了,必须在intel64后面加上那个vc12,否则找不到。通过查看附加库目录就可以知道配置的是否正确,如下图所示:

四、结束语
本篇博文,到此就结束了。对于想学习OpenCV,对计算机视觉有兴趣的朋友,动手编译自己的OpenCV库,应该是一个不错的开始。对文章中出现的不足和错误,欢迎指正。
_________________________________________________________________________________________________________________________________________________
每一个不曾起舞的日子,都是对生命的辜负。
But it is the same with man as with the tree. The more he seeks to rise into the height and light, the more vigorously do his roots struggle earthward, downward, into the dark, the deep - into evil.
其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采
每一个不曾起舞的日子,都是对生命的辜负。
But it is the same with man as with the tree. The more he seeks to rise into the height and light, the more vigorously do his roots struggle earthward, downward, into the dark, the deep - into evil.
其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采











浙公网安备 33010602011771号