1. 下载OpenCV2.4.9,找一个路径(比如说D:\)Extract,得到source和build两个文件夹。source包含了.hpp(source\Include)、.cpp(source\modules\)和cmake等文件,Build包含了.dll(build\x64\vc12\bin)和.lib(build\x64\vc12\lib)等文件。
这些都是可以直接用的,如果不需要GPU的支持,可以跳到步骤3。如果需要GPU的支持,则需要下载cuda,我用的是7.5.18。
2. OpenCV安装完毕后,需要:
1. 设置PC的环境变量Path(为了能找到dll):D:\opencv\build\x64\vc12\bin; D:\opencv\build\x86\vc12\bin
如果你的工程是win32的,而你只设置了x64的环境变量,那么就会出现LINK 1152错误:“模块计算机类型“x64”与目标计算机类型“X86”冲突”,可以理解,调用dll冲突了嘛。
3. 安装cuda完毕后,需要用cmake对OpenCV的lib和dll重新编译。你可以把cmake想象为一个用来跨平台编译的脚本。
3.1 第一次用cmake需要选择Generator,这里我们选Visual Studio 12 2013 Win64(之所以算Win64是因为很多CUDA的函数必须要64bit来支持)。
3.2 Configure。出现一堆红颜色的。选择WITH_CUDA,WITH_CUBLAS,WITH_OPENGL。CUDA_GENERATION选择Kepler(否则后面编译OpenCV时会报错 Unsupported gpu architecture 'compute_11'。
3.3 再次Generate。你会看到:
Other third-party libraries:
Use IPP: NO
Use Eigen: NO
Use TBB: NO
Use OpenMP: NO
Use GCD NO
Use Concurrency YES
Use C=: NO
Use Cuda: YES (ver 7.5)
Use OpenCL: YES
3.4 Generate。于是你在build下得到了OpenCV.sln。打开它,先对opencv_core和opencv_gpu Build一下,看看对不对。opencv_core的Build结果:
“正在创建库 D:/opencv/build/lib/Debug/opencv_core249d.lib 和对象 D:/opencv/build/lib/Debug/opencv_core249d.exp opencv_core.vcxproj -> D:\opencv\build\bin\Debug\opencv_core249d.dll ========== 生成: 成功 3 个,失败 0 个,最新 0 个,跳过 0 个 ==========”
此时如果弹出“需要重新加载”的对话框,点击“重新加载”。
3.5 依次进行ALL_BUILD(生成很多OpenCV项目文件)、INSTALL(在build下生成install文件夹)。
有几个没有正确生成:
opencv_contrib:2>------ 已启动生成: 项目: opencv_nonfree, 配置: Debug x64 ------
2>LINK : fatal error LNK1104: 无法打开文件“..\..\lib\Debug\opencv_gpu249d.lib”
3>------ 已启动生成: 项目: opencv_contrib, 配置: Debug x64 ------
3>LINK : fatal error LNK1104: 无法打开文件“..\..\lib\Debug\opencv_nonfree249d.lib”
4.在项目->属性->VC++目录->库目录中添加路径:D:\opencv\build\x86\vc12\lib; D:\opencv\build\x64\vc12\lib; (这里的vc12指VS2013)
否则会报错:error LNK1104: 无法打开文件“opencv_imgproc249d.lib”
因为在链接时,VS是按照库目录去找lib的。
5 在项目->属性->链接器->附加依赖项中添加lib(注意,下文lib名称中的249指的是OpenCV2.4.9,其他版本的不是这个值)
对于debug的工程有(也可以用哪个添加哪个):
opencv_imgproc249d.lib
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_core249d.lib
opencv_features2d249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
opencv_highgui249d.lib
opencv_legacy249d.lib
opencv_ml249d.lib
opencv_nonfree249d.lib
opencv_objdetect249d.lib
opencv_ocl249d.lib
opencv_photo249d.lib
opencv_stitching249d.lib
opencv_superres249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_videostab249d.lib
对于Release的工程有:
opencv_imgproc249.lib
opencv_calib3d249.lib
opencv_contrib249.lib
opencv_core249.lib
opencv_features2d249.lib
opencv_flann249.lib
opencv_gpu249.lib
opencv_highgui249.lib
opencv_legacy249.lib
opencv_ml249.lib
opencv_nonfree249.lib
opencv_objdetect249.lib
opencv_ocl249.lib
opencv_photo249.lib
opencv_stitching249.lib
opencv_superres249.lib
opencv_ts249.lib
opencv_video249.lib
opencv_videostab249.lib
如果不添加,在Build时会报LNK2019 、LNK2001、LNK1120的错误:无法解析的外部符号。