64位WIN7+VS2013+OpenCV2.4.13+CUDA7.5的配置
小别出道写作水平较低请各位大师们多多指点
本文主要介绍如何在Visual Studio 2013下配置CUDA7.5并且在64位WIN7下编译OpenCV2.4.13版本的OpenCV实现它的GPU模块的使用。具体步骤如下:
1。下载VS2013安装:
直接上地址https://visual-studio-2013.en.softonic.com/下载安装。秘钥自己在网上找
2。OpenCV2.4.13下载:
同样,地址http://opencv.org/releases.html。点击Releases下2.4.13右边的Win pack下载。全免费,无需秘钥。
3。下载CMAKE:
上CMAKE官网https://cmake.org/。点击右边RecentPosts下的的CMake 3.8.1 available for download,后点击下面的https://cmake.org/download/链接地址,在Latest Release (3.8.1)下点击cmake-3.8.1-win64-x64.zip。
4.下载TBB(线程构建模块)
官方地址https://www.threadingbuildingblocks.org/。在Latest Posts下面选择合适版本。点击Download it后选择支持Visual Studio的版本下载。
5.下载CUDA安装:
进入官网http://www.nvidia.cn/object/cuda-downloads-cn.html下载
6.添加CUDA7.5相关的环境变量:
安装完CUDA7.5系统会自动生成2个系统变量CUDA_PATH和CUDA_PATH_V7.5(以下为我的配置)
变量名:CUDA_PATH
变量值:C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5
变量名:CUDA_PATH_V7_5
变量值:C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5
需要添加的系统变量为:(变量名:变量值)
CUDA_BIN_PATH:%CUDA_PATH%\bin
CUDA_LIB_PATH:%CUDA_PATH%\lib\x64
CUDA_SDK_BIN_PATH:%CUDA_SDK_PATH%\bin\x64
CUDA_SDK_LIB_PATH:%CUDA_SDK_PATH%\common\lib\x64
CUDA_SDK_PATH:C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5
最后在系统变量PATH的变量值后面添加:
%CUDA_LIB_PATH%; %CUDA_BIN_PATH%; %CUDA_SDK_LIB_PATH%; %CUDA_SDK_BIN_PATH%;
7.添加TBB相关的环境变量:
将下载压缩完成后它的bin目录添加到系统变量Path内:
D:\opencv\TBB\tbb42_20140122oss_win\tbb42_20140122oss\bin\intel64\vc12
8.修改完上述环境变量后,注销或重启计算机。
9.安装最新显卡驱动:
到英伟达官网http://www.geforce.cn/drivers下载最新显卡驱动。根据自己的显卡型号修改第2和3栏选项
另外说一句CUDA目前貌似只支持英伟达系列显卡,想要查看自己的显卡类型可以下载驱动人生查看计算机配置这里不做过多说明了。
例如我的显卡是GTX 850。
在图上下面的结果栏下载最新驱动。下载后默认路径安装即可。
10.打开CMake,在Where is the source code:中添加D:/opencv/opencv2.4.13/sources。在Where to build the binaries:中添加D:/opencv/opencv2.4.13/vs2013_cuda_dll。如图。
11.点击左下面的Configure按钮,在弹出的对话框中选择Visual Studio 2013,然后点击Finish。
12.如果有红色出现,对BUILD_EXAMPLES、WITH_TBB、WITH_CUBLAS、WITH_CUDA、WITH_CUFFT打勾,然后再次点击Configure按钮。
13.如果还有红色出现,对TBB_LIB_DIR、TBB_STDDEF_PATH打勾,再次点击Configure按钮。
14.如果下方有如下信息:Use TBB: YES,Use Cuda: YES,证明我们已经将inteltbb和CUDA正确配置;
15.点击Generate按钮,此时会在D:\opencv\opencv2.4.13\vs2013_cuda_dll文件下生成OpenCV.sIn文件。
16.以管理员身份,打开OpenCV.sIn文件,先在解决方案’OpenCV’右键à属性页à配置属性à配置管理器à活动解决平台方案下拉菜单点击新建à在键入或选择新平台下键入x64来创建64位平台,在然后解决方案’OpenCV’àCMakeTargetsàALL_BUILD右键à属性à配置属性àVC++目录中配置如下:(根据个人文件所在位置添加)
在包含目录中添加:
D:\opencv\TBB\tbb42_20140122oss_win\tbb42_20140122oss\include
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\include
D:\opencv\opencv2.4.13\build\include
D:\opencv\opencv2.4.13\build\include\opencv
D:\opencv\opencv2.4.13\build\include\opencv2
在库目录中添加:
D:\opencv\TBB\tbb42_20140122oss_win\tbb42_20140122oss\lib\intel64\vc12
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\lib\x64
D:\opencv\opencv2.4.13\build\x64\vc12\lib
在附加目录中添加:
D:\opencv\TBB\tbb42_20140122oss_win\tbb42_20140122oss\bin\intel64\vc12
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\bin
D:\opencv\opencv2.4.13\build\x64\vc12\bin
17.点击modulesà右键opencv_gpuà配置属性à链接器à输入à忽略特定默认库下加入libcmtlibcmtd;
18. 分别在Debug和Release下,选择SolutionExplorer里的Solution OpenCV,点击右键,运行”Rebuild Solution”。(这个过程比较漫长大约需要2多小时)
19. 点击CMakeTargets下的INSTALL—右键—仅本工程build,后会在D:\opencv\opencv2.4.13\vs2013_cuda_dll\install下生成经过CUDA编译后支持GPU的OPENCV开发库文件。
20.添加OPENCV变量:
在用户变量中添加:(变量名:变量值)
opencv_cuda:D:\opencv\opencv2.4.13\vs2013_cuda_dll\install
在系统变量Path中添加:D:\opencv\opencv2.4.13\vs2013_cuda_dll\install\x64\vc12\bin
注意。如果之前已经安装好OpenCV添加完成之前的变量的话应定要将上面的变量名在之前的名字之前。否则会造成运用OpenCV的GPU模块调用getCudaEnabledDeviceCount()函数返回值始终为0造成程序无法运行。
配置完变量后重启计算机。
21.新建vs2013工程,先右键工程-->生成依赖项-->点击生成自定义-->勾选CUDA7.5选项。然后配置环境。右键工程项目à属性à配置属性àVC++目录。分别在
包含目录中添加:
D:\opencv\opencv2.4.13\vs2013_cuda_dll\install\include
D:\opencv\opencv2.4.13\vs2013_cuda_dll\install\include\opencv
D:\opencv\opencv2.4.13\vs2013_cuda_dll\install\include\opencv2
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\include
C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5\common\inc
库目录中添加:
D:\opencv\opencv2.4.13\vs2013_cuda_dll\install\x64\vc12\lib
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\lib\x64
C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5\common\lib\x64
22.在属性页中,链接器à常规à附加库目录中添加:$(CUDA_PATH_V7_5)\lib\$(Platform)
23.分别在在Debug和Release下,在链接器的输入的附加依赖库中添加如下库:
opencv_calib3d2413.lib
opencv_contrib2413.lib
opencv_core2413.lib
opencv_features2d2413.lib
opencv_flann2413.lib
opencv_gpu2413.lib
opencv_highgui2413.lib
opencv_imgproc2413.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
cuda.lib
cudart.lib
curand.lib
cublas.lib
cublas_device.lib
cudadevrt.lib
cudart_static.lib
cufft.lib
cufftw.lib
cusolver.lib
nppc.lib
nppi.lib
npps.lib
nvblas.lib
nvcuvid.lib
nvrtc.lib
OpenCL.lib
注意。以opencv开头的是opencv中的库函数如果是Debug下需要在文件名末尾加入字母d,Release下不用加。剩下的是cuda的库函数。
24.测试。
测试代码如下:
#include<stdlib.h>
#include<device_launch_parameters.h>
#include<cuda_runtime.h>
#include<opencv2\opencv.hpp>
#include<opencv2\gpu\gpu.hpp>
int main()
{
intnum_devices = cv::gpu::getCudaEnabledDeviceCount();
if(num_devices <= 0)
{
std::cerr<< "There is no devoce" << std::endl;
return-1;
}
intenable_device_id = -1;
for(int i = 0; i < num_devices; i++)
{
cv::gpu::DeviceInfodev_info(i);
if(dev_info.isCompatible())
{
enable_device_id= i;
}
}
if(enable_device_id < 0)
{
std::cerr<< "GPU module isn't built for GPU" << std::endl;
return-1;
}
cv::gpu::setDevice(enable_device_id);
cv::Matsrc_image = cv::imread("D:\\picture\\left_picture.jpg");
cv::Matdst_image;
cv::gpu::GpuMatd_src_img(src_image);//upload src image to gpu
cv::gpu::GpuMatd_dst_img;
cv::gpu::cvtColor(d_src_img,d_dst_img, CV_BGR2GRAY);//////////////////canny
d_dst_img.download(dst_image);//downloaddst image to cpu
cv::imshow("test",dst_image);
cv::waitKey(50000);
return0;
}