VS2013+OpenCV3.4.2+cuda9.1环境配置


如果我们做图像处理相关工作的话opencv是很重要的库,对于处理很多的重复性的工作我们可以把相关执行代码放到gpu上面执行,但是因为现在的官方的opencv库是不带gpu模块的(之前还以为可以用)。所以需要我们自己下载源码编译,但是其中的坑是非常多的,各个版本之间有很可能冲突,安装编译过程中也会有很多问题。
本机安装环境:win10+VS2013+cuda9.1+CMake3.4.2+OpenCv3.4.2+其他自己需要的库(这个保证vs和相应库版本对应就行了)

CUDA9.1下载安装

step1
控制面板-硬件和声音-Nvidia 控制面板-帮助-系统信息-组件,
查看显卡支持的cuda版本:我的显卡对应的是cuda9.1
在这里插入图片描述
这里需要注意的是cuda版本和vs的选择有关系,比如我的是cuda9.1,但是我之前用的vs2019,因为cuda版本太低,两者就不匹配,所以我就换成了vs2013。

step2
去官网下载对应版本的安装程序
官网链接: https://developer.nvidia.com/cuda-toolkit-archive.
在这里插入图片描述
step3
点击下载的.exe进行安装
这里没有太多要说的,安装的时候可以选择默认路径也可以选择自定义。
在这里插入图片描述
step4
查看安装是否成功,点开cmd,输入:nvcc -V
如下图会出现相关说明,如果失败的话,可以去看看环境变量里面是否对应的cuda相关的变量:CUDA_PATH和CUDA_PATH_V9_1。
还是不行的话建议重装,这个安装也不麻烦,应该问题不大。
在这里插入图片描述

CMake下载安装

step1
CMake的下载地址:https://github.com/Kitware/CMake/releases.
注意:CMake的版本选择是有一点要求的,不要太高也不要太低,我用的是3.7版本,亲测可以,比如cmake3.7就不支持vs2019,原因是cmake版本过低,这是根据发行日期来决定的。

step2
安装过程中很简单,唯一注意的点是安装的时候注意选择自动添加环境变量,否则你还得手动配置,还有可能出错。
在这里插入图片描述
step3
检查是否安装成功,打开cmd,输入:cmake
在这里插入图片描述

OpenCv下载编译

step1
官网下载源码:https://github.com/opencv.

step2
打开CMake,选择源文件夹和生成存放的文件夹(建议新建一个build文件来存放)
在这里插入图片描述
选择Configure,点击自己对应的vs版本,带64的表示是64位,不带的表示32.这里建议选择64的。
在这里插入图片描述
这个时候点击configure,然后点击generate。如果成功的话会出现,configure done,generate done。
记得generate之前勾选with cuda,其实一般都是自动勾选了。
中间或许会出现有关ffempeg的报错,因为opencv3.4.2源码cmake需要额外下载opencv_ffmpeg.dll、opencv_ffmpeg_64.dll、ffmpeg_version.cmake等。
如果你不需要用到ffmpeg可以忽略,如果需要的话就去下载对应的文件,每当报出类似错误就找对应的文件及文件夹替换进去即可。这个我没弄,网上一找就很容易找到。
step3
在生成的build文件夹中找到OpenCV.sln,在vs2013中打开
在Debug模式下选择重新生成解决方案,可能需要耗费2-4小时
中途如果弹出外部环境发生变化点击全部重新加载
右键INSTALL–>仅用于项目–>仅生成INSTALL(B)
在这里插入图片描述
然后选择realease模式,同理上述操作,完成之后在install\x64\vc12\lib文件夹下就会生成lib文件
在这里插入图片描述
将路径D:----\install\x64\vc12\lib添加入环境变量中
step4
新建vs项目配置相关环境
在项目属性中,选择配置Debug,平台x64
VC++目录添加包含目录
D:\opencv3.4\opencv-3.4.2\build\install\include
D:\opencv3.4\opencv-3.4.2\build\install\include\opencv
D:\opencv3.4\opencv-3.4.2\build\install\include\opencv2
添加库目录
D:\opencv3.4\opencv-3.4.2\build\install\x64\vc12\lib

链接器–输入–附加依赖项,加入install生成的库文件lib:

opencv_aruco342d.lib
opencv_bgsegm342d.lib
opencv_bioinspired342d.lib
opencv_calib3d342d.lib
opencv_ccalib342d.lib
opencv_core342d.lib
opencv_cudaarithm342d.lib
opencv_cudabgsegm342d.lib
opencv_cudacodec342d.lib
opencv_cudafeatures2d342d.lib
opencv_cudafilters342d.lib
opencv_cudaimgproc342d.lib
opencv_cudalegacy342d.lib
opencv_cudaobjdetect342d.lib
opencv_cudaoptflow342d.lib
opencv_cudastereo342d.lib
opencv_cudawarping342d.lib
opencv_cudev342d.lib
opencv_datasets342d.lib
opencv_dnn_objdetect342d.lib
opencv_dnn342d.lib
opencv_dpm342d.lib
opencv_face342d.lib
opencv_features2d342d.lib
opencv_flann342d.lib
opencv_fuzzy342d.lib
opencv_hdf342d.lib
opencv_hfs342d.lib
opencv_highgui342d.lib
opencv_img_hash342d.lib
opencv_imgcodecs342d.lib
opencv_imgproc342d.lib
opencv_line_descriptor342d.lib
opencv_ml342d.lib
opencv_objdetect342d.lib
opencv_optflow342d.lib
opencv_phase_unwrapping342d.lib
opencv_photo342d.lib
opencv_plot342d.lib
opencv_reg342d.lib
opencv_rgbd342d.lib
opencv_saliency342d.lib
opencv_shape342d.lib
opencv_stereo342d.lib
opencv_stitching342d.lib
opencv_structured_light342d.lib
opencv_superres342d.lib
opencv_surface_matching342d.lib
opencv_text342d.lib
opencv_tracking342d.lib
opencv_video342d.lib
opencv_videoio342d.lib
opencv_videostab342d.lib
opencv_xfeatures2d342d.lib
opencv_ximgproc342d.lib
opencv_xobjdetect342d.lib
opencv_xphoto342d.lib

配置release模式下的同理,只不过附加依赖项中对应的lib文件后面没有d,有d的对应debug,没d的对应release。

测试

对两张图片在gpu上做了一个简单的加法运算。

#include <iostream>
#include <opencv2\opencv.hpp>

#include <opencv2/core/cuda.hpp>
 
using namespace std;
using namespace cv;
 
int main()
{
	Mat img1 = imread("01.jpg");
	Mat img2 = imread("02.jpg");
 
	if (img1.empty() | img2.empty() ){
		cout << "Could not open an image!" << endl;
		return -1;
	}
 
	//Create memory for resorting images on device
	cuda::GpuMat d_result, d_img1, d_img2;
	Mat h_result;
 
	//Upload images to device
	d_img1.upload(img1);
	d_img2.upload(img2);
 
	cuda::add(d_img1, d_img2, d_result);
 
	//Download result back to host
	d_result.download(h_result);
 
	imshow("Image1", img1);
	imshow("Image2", img2);
	imshow("Result", h_result);
 
	waitKey();
    return 0;
}

也可使用这个函数getCudaEnabledDeviceCount,如果它的返回值是《=0的,那么就是opencv的cuda模块有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值