Win7+VS2013+OpenCV2.4.13+CUDA7.5.18+CMAKE3.3.0 环境搭建

来源:互联网 发布:origin软件使用教程 编辑:程序博客网 时间:2024/06/08 07:34

本人参考了很多人的blog,在踩了很多坑、看了不少stackoverflow后,总结出以下安装方法。希望各位少走弯路。

搭建环境之前,需要

1. 查询显卡的架构:https://developer.nvidia.com/cuda-gpus#collapse4,本人使用Geforce GTX 750,架构是Maxwell,Compute Capability=5.0。

2. 选择OpenCV的版本:OpenCV2.4.9是不支持Maxwell的,应换成OpenCV2.4.13

PS:用OpenCV2.4.9编译后的问题会很多,本人遇到的主要是:在Cmake中将架构改为kepler并编译后,使用convertTo及其他的gpu::函数会遇到Exception:

http://stackoverflow.com/questions/22823186/opencv-gpu-mat-hanging

http://answers.opencv.org/question/68301/device-geforce-gtx-980-is-not-compatible-with-current-gpu-module-build/

总之,更新OpenCV的版本吧。

3. 安装CUDA Toolkit

4. 下载Cmake

注:本人未使用tbb。



搭建环境的步骤如下:
1. 下载OpenCV2.4.13后,找一个路径(比如说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_ARCH_BIN=2.0 2.1(2.0) 3.0 3.5 5.0、CUDA_ARCH_PTX=5.0。在CUDA_GENERATION中,什么都不要选择(不能选择Kepler,因为GTX 750的架构是Maxwell。如果选择Kepler,虽然编译都能过,但最后调用库的时候会有Exception)。
     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_core2413d.lib 和对象 D:/opencv/build/lib/Debug/opencv_core2413d.exp  opencv_core.vcxproj -> D:\opencv\build\bin\Debug\opencv_core2413d.dll ========== 生成:  成功 3 个,失败 0 个,最新 0 个,跳过 0 个 ==========”
此时如果弹出“需要重新加载”的对话框,点击“重新加载”。

     3.5  依次进行ALL_BUILD(生成很多OpenCV项目文件)、INSTALL(在build下生成install文件夹)。

     3.6  将D:\opencv\build\install\x64\vc12\bin下的dll拷贝到C:\Windows\System32路径下。





4.在项目->属性->VC++目录->库目录中添加OpenCV库的路径:D:\opencv\build\x86\vc12\lib; D:\opencv\build\x64\vc12\lib;  (这里的vc12指VS2013)
否则会报错:error LNK1104: 无法打开文件“opencv_imgproc2413d.lib”
因为在链接时,VS是按照库目录去找lib的。
同样,也添加CUDA的库:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64(因为会用到cuda_runtime.h)


5 在项目->属性->链接器->附加依赖项中添加lib(注意,下文lib名称中的2413指的是OpenCV2.4.13,其他版本的不是这个值)
对于debug的工程有(也可以用哪个添加哪个):
opencv_imgproc2413d.lib  
opencv_calib3d2413d.lib  
opencv_contrib2413d.lib  
opencv_core2413d.lib  
opencv_features2d2413d.lib  
opencv_flann2413d.lib  
opencv_gpu2413d.lib  
opencv_highgui2413d.lib  
opencv_legacy2413d.lib  
opencv_ml2413d.lib  
opencv_nonfree2413d.lib  
opencv_objdetect2413d.lib  
opencv_ocl2413d.lib  
opencv_photo2413d.lib  
opencv_stitching2413d.lib  
opencv_superres2413d.lib  
opencv_ts2413d.lib  
opencv_video2413d.lib  
opencv_videostab2413d.lib 
cudart.lib


对于Release的工程有:
opencv_imgproc2413.lib  
opencv_calib3d2413.lib  
opencv_contrib2413.lib  
opencv_core2413.lib  
opencv_features2d2413.lib  
opencv_flann2413.lib  
opencv_gpu2413.lib  
opencv_highgui2413.lib  
opencv_legacy2413.lib  
opencv_ml2413.lib  
opencv_nonfree2413.lib  
opencv_objdetect2413.lib  
opencv_ocl2413.lib  
opencv_photo2413.lib  
opencv_stitching2413.lib  
opencv_superres2413.lib  
opencv_ts2413.lib  
opencv_video2413.lib  
opencv_videostab2413.lib 
cudart.lib
如果不添加,在Build时会报LNK2019 、LNK2001、LNK1120的错误:无法解析的外部符号。





0 0
原创粉丝点击