Windows系统下OpenCV+Contrib+CUDA配置(VS2017+OpenCV3.4.3+CUDA10.0)

本文是在上一篇文章的基础上加入CUDA的配置,核心依然是使用Cmake对OpenCV+Contrib进行配置。配置过程中需要注意一些小细节的设置并且一定要有耐心。
上一篇文章链接:https://blog.csdn.net/stjuliet/article/details/83903619

step1 运行环境和前期准备

操作系统和其他基础配置请参考上文,这里只展示与上文不一样的地方。

笔者的显卡为NVIDIA GeForce GT730 (2GB),计算能力为3.5.

1、查看自己电脑配置的显卡是否为NVIDIA显卡,是否支持CUDA:
https://developer.nvidia.com/cuda-gpus

2、下载显卡驱动并安装:
https://www.nvidia.cn/Download/index.aspx?lang=cn
此步骤可以省略,安装CUDA时会自动安装显卡驱动程序

3、根据自己电脑的情况下载CUDA并安装:
https://developer.nvidia.com/cuda-toolkit
因笔者使用的是VS2017,因此只能选择CUDA10.0,如果需要使用其他版本可以直接搜索找到下载链接
建议选择精简版,并且不修改安装路径

驱动和CUDA的具体安装过程可参考下文:
https://blog.csdn.net/qq_30623591/article/details/82084113

step2 编译OpenCV和Contrib库(WITH CUDA)

笔者的配置过程参考了以下文章:
https://blog.csdn.net/fengbingchun/article/details/9831837
https://blog.csdn.net/qq_15947787/article/details/78534272
https://blog.csdn.net/Goerge_L/article/details/79777989
https://blog.csdn.net/mangobar/article/details/80459866

1、
在这里插入图片描述

在这里插入图片描述

2、
点击finish后等待第一次congfigure done。在上文的基础上勾选WITH_CUDA,并且在配置表中找到“OPENCV_EXTRA_MODULES_PATH”,设置其参数值为open_contrib源码包中的modules目录。如果想缩短编译和重新生成解决方案的时间,建议将BUILD_EXAMPLES去除。再次点击configure。

3、
第二次configure done并且没有红色时,点击generate,完成后直接点击open project或者到编译输出目录下找到OpenCV.sln使用自己的VS打开此解决方案,打开解决方案后在x64 debug下重新生成解决方案。
重新生成过程中如果遇到提示“某个项目外部环境已更改”,选择全部重新加载即可。
配置CUDA的情况下,重新生成解决方案的时间很长,平均都要2-3小时,耐心等待吧。

接着找到CMakeTargets中的INSTALL,然后右键选择“仅用于项目”–>“仅生成INSTALL”。
生成结束后,按照之前的方法,新建解决方案后在属性管理器中把包含目录、库目录和附加依赖项配置好。
包含目录和库目录可以参考上一篇配置的文章。
附加依赖项(与之前有所不同,多了一些cuda的模块):
opencv_aruco343d.lib
opencv_bgsegm343d.lib
opencv_bioinspired343d.lib
opencv_calib3d343d.lib
opencv_ccalib343d.lib
opencv_core343d.lib
opencv_cudaarithm343d.lib
opencv_cudabgsegm343d.lib
opencv_cudacodec343d.lib
opencv_cudafeatures2d343d.lib
opencv_cudafilters343d.lib
opencv_cudaimgproc343d.lib
opencv_cudalegacy343d.lib
opencv_cudaobjdetect343d.lib
opencv_cudaoptflow343d.lib
opencv_cudastereo343d.lib
opencv_cudawarping343d.lib
opencv_cudev343d.lib
opencv_datasets343d.lib
opencv_dnn343d.lib
opencv_dpm343d.lib
opencv_face343d.lib
opencv_features2d343d.lib
opencv_flann343d.lib
opencv_fuzzy343d.lib
opencv_highgui343d.lib
opencv_img_hash343d.lib
opencv_imgcodecs343d.lib
opencv_imgproc343d.lib
opencv_line_descriptor343d.lib
opencv_ml343d.lib
opencv_objdetect343d.lib
opencv_optflow343d.lib
opencv_phase_unwrapping343d.lib
opencv_photo343d.lib
opencv_plot343d.lib
opencv_reg343d.lib
opencv_rgbd343d.lib
opencv_saliency343d.lib
opencv_shape343d.lib
opencv_stereo343d.lib
opencv_stitching343d.lib
opencv_structured_light343d.lib
opencv_superres343d.lib
opencv_surface_matching343d.lib
opencv_text343d.lib
opencv_tracking343d.lib
opencv_video343d.lib
opencv_videoio343d.lib
opencv_videostab343d.lib
opencv_xfeatures2d343d.lib
opencv_ximgproc343d.lib
opencv_xobjdetect343d.lib
opencv_xphoto343d.lib

注:重新生成解决方案不报错那自然是最好的了,笔者试了好几次,只有第一次完全正确,之后总是有少许错误,虽然不影响最后的install结果,但是会少1-2个lib,可能有些功能就无法使用了。经过多次测试,笔者发现如果某一个项目没有成功生成,可以直接到编译输出目录下的modules文件夹中找到未成功的项目名称文件夹,打开对应的.sln文件重新生成解决方案,再到CMakeTargets中生成INSTALL。这种方法不需要对所有项目再全部重新生成一遍,可以节约很多时间。

step3 测试

测试的目的主要是检测OpenCV是否正确配置好CUDA,是否可以使用GPU进行加速。
测试代码主要有以下三种:

//OpenCV3以后将命名空间变为cv::cuda, 原先是cv::gpu

	//测试显卡方法1(此方法可以读取显卡型号)
	cv::cuda::printShortCudaDeviceInfo(cv::cuda::getDevice());

	//测试显卡方法2
	int iDevicesNum = cv::cuda::getCudaEnabledDeviceCount();
	cout << iDevicesNum << endl;

	//测试显卡方法3
	cv::cuda::DeviceInfo _deviceInfo;
	bool _isDeviceOK = _deviceInfo.isCompatible();
	std::cout << "IsGPUDeviceOK : " << _isDeviceOK << std::endl;

如果抛出no cuda support的错误,可以将编译输出目录->install->x64->vc15->bin下的opencv_core343d.dll复制到C盘Windows的system32和64目录下。

网上找的测试代码,使用ORB提取单幅图像的特征点:
https://blog.csdn.net/m0_37857300/article/details/79039214
测试图片来自于毛星云《OpenCV3编程入门》配套电子资料。
在这里插入图片描述

断断续续摸索了一个星期多的时间,配置过程磕磕绊绊,总算把遇到的各种问题都解决了,但是因为各种因素,笔者打算弃用VS2017,转为之前一直使用的VS2015,因此此文写得较为简单,下文会详细写VS2015的CUDA配置过程。
非常感谢博客上关于CUDA配置的各种攻略和资源。

Juliet 于 2018.11

猜你喜欢

转载自blog.csdn.net/stjuliet/article/details/83957512