vs2017配置cuda和opencv环境

vs2017配置opencv环境网上的资料比较多也比较全,这里就不重点描述了。不过还是贴一个写的比较详细,图文并茂的博客。如下(建议采用临时配置方法,也就是下面博客中的方法二):

VS2017配置OpenCV4.0(Win10环境)

vs2017配置cuda的资料相对较少,这里重点描述。

首先说碰到的情况。我这里碰到了两种情况:第一种,先装cuda后装vs2017。这样的安装的顺序,一般情况下,cuda和vs2017安装过程不会出现冲突。在确保cuda和vs2017都安装成功情况下,这个时候配置相对简单,主要是把cuda的动态库路径配置好就行。方法和配置opencv环境一样。详细步骤如下:

新建一个vs2017项目,在参考上面贴出配置opencv环境的博客后,你应该知道如下操作(也建议采用临时配置方法):

  1. 右键项目 → 属性 → 配置属性 → VC++目录 → 包含目录,添加以下目录:
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include(注意自己的cuda路径,安装cuda时我是默认安装路径的)
    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\common\inc
  2. 库目录,添加以下目录:
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64
    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\common\lib\x64
  3. 右键项目 → 属性 → 配置属性 → 链接器 → 输入 → 附加依赖项,添加以下库(注意我安装的是cuda10,不同cuda版本下面的库名可能不一样,最好是到这个“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64”目录去看一下):
    cublas.lib
    cuda.lib
    cudadevrt.lib
    cudart.lib
    cudart_static.lib
    cufft.lib
    cufftw.lib
    curand.lib
    cusolver.lib
    cusparse.lib
    nppc.lib
    nppial.lib
    nppicc.lib
    nppicom.lib
    nppidei.lib
    nppif.lib
    nppig.lib
    nppim.lib
    nppist.lib
    nppisu.lib
    nppitc.lib
    npps.lib
    nvblas.lib
    nvgraph.lib
    nvml.lib
    nvrtc.lib
    OpenCL.lib

     

 第一种情况的配置cuda和opencv环境就完成了,是不是有点简单呀(以前没有配置过类似的就会觉得比较难)。

第二种情况先装vs2017后装cuda会有点小问题。详细情况如下:

安装vs2017肯定没啥问题了。但是安装cuda时,如果还默认安装就会有问题,原因是安装了vs2017。其实,安装cuda时里面会带有vs组件,如果已经安装了vs2017或者比cuda里面自带的版本要高,这个时候cuda安装是不会成功的。正确的方法如下:

vs2017配置cuda和opencv环境_第1张图片

vs2017配置cuda和opencv环境_第2张图片

安装的路径看个人习惯了。配置cuda的系统环境和cudnn的资料就比较多了,这里就不贴出了。安装好vs2017和cuda后,现在我们来配置vs2017的cuda环境。

由于安装cuda时我们没有勾选vs相关组件,所以,现在需要做一些其他操作。解压cuda安装程序(即解压cuda_10.0.130_411.31_win10.exe),把“CUDAVisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions”文件复制到自己安装vs2017路径的“\Common7\IDE\VC\VCTargets\BuildCustomizations”。比如我的如下:

vs2017配置cuda和opencv环境_第3张图片

配置完这个后,后面的操作就和第一种情况一样了,按照上面的操作就行。下面测试是否安装成功。opencv的测试就不多说了,贴出的博客中全有。

cuda测试一(第一种成功了,后面可以不用测试了):

#include 
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include 
#include 

int main() {
	int deviceCount;
	cudaGetDeviceCount(&deviceCount);

	int dev;
	for (dev = 0; dev < deviceCount; dev++)
	{
		int driver_version(0), runtime_version(0);
		cudaDeviceProp deviceProp;
		cudaGetDeviceProperties(&deviceProp, dev);
		if (dev == 0)
			if (deviceProp.minor = 9999 && deviceProp.major == 9999)
				printf("\n");
		printf("\nDevice%d:\"%s\"\n", dev, deviceProp.name);
		cudaDriverGetVersion(&driver_version);
		printf("CUDA驱动版本:                                   %d.%d\n", driver_version / 1000, (driver_version % 1000) / 10);
		cudaRuntimeGetVersion(&runtime_version);
		printf("CUDA运行时版本:                                 %d.%d\n", runtime_version / 1000, (runtime_version % 1000) / 10);
		printf("设备计算能力:                                   %d.%d\n", deviceProp.major, deviceProp.minor);
		printf("Total amount of Global Memory:                  %u bytes\n", deviceProp.totalGlobalMem);
		printf("Number of SMs:                                  %d\n", deviceProp.multiProcessorCount);
		printf("Total amount of Constant Memory:                %u bytes\n", deviceProp.totalConstMem);
		printf("Total amount of Shared Memory per block:        %u bytes\n", deviceProp.sharedMemPerBlock);
		printf("Total number of registers available per block:  %d\n", deviceProp.regsPerBlock);
		printf("Warp size:                                      %d\n", deviceProp.warpSize);
		printf("Maximum number of threads per SM:               %d\n", deviceProp.maxThreadsPerMultiProcessor);
		printf("Maximum number of threads per block:            %d\n", deviceProp.maxThreadsPerBlock);
		printf("Maximum size of each dimension of a block:      %d x %d x %d\n", deviceProp.maxThreadsDim[0],
			deviceProp.maxThreadsDim[1],
			deviceProp.maxThreadsDim[2]);
		printf("Maximum size of each dimension of a grid:       %d x %d x %d\n", deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], deviceProp.maxGridSize[2]);
		printf("Maximum memory pitch:                           %u bytes\n", deviceProp.memPitch);
		printf("Texture alignmemt:                              %u bytes\n", deviceProp.texturePitchAlignment);
		printf("Clock rate:                                     %.2f GHz\n", deviceProp.clockRate * 1e-6f);
		printf("Memory Clock rate:                              %.0f MHz\n", deviceProp.memoryClockRate * 1e-3f);
		printf("Memory Bus Width:                               %d-bit\n", deviceProp.memoryBusWidth);
	}

	//读取图片(使用图片的绝对路径)
	cv::Mat src = cv::imread("123.png");
	//显示图片
	cv::imshow("Output", src);
	//显示灰度图
	cv::Mat Gray;
	cvtColor(src, Gray, 6);
	cv::imshow("Gray", Gray);

	cv::waitKey(0);

	return 0;
}

结果图:

vs2017配置cuda和opencv环境_第4张图片

cuda测试二:编译cuda自带的例程(自带的例程有的需要安装其他库函数,不建议全部编译)我这里选择如下例程:

vs2017配置cuda和opencv环境_第5张图片

点击编译:一般情况编译会出现如下问题:error MSB8036: 找不到 Windows SDK 版本10.0.15063.0。请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SDK 版本。解决方法如下:

vs2017配置cuda和opencv环境_第6张图片

然后再点击编译即可:

效果如下:

 

你可能感兴趣的:(opencv,cuda)