C++ 用VS编译OpenCV+CUDA

正文索引 [隐藏]

前言

毕业设计要使用到OpenCV,然后我打算用C++写着试试(之前有用过opencv-python,无脑pip安装),结果我哭了,你呢?我配置了好久,动不动就安装失败,尤其是CUDA那部分。 这里给一个所有文件的百度网盘链接,根据需要自行选择下载。链接:https://pan.baidu.com/s/1Zq7JrkwrEvSRpcfI5b6fKA 。提取码:2021。

系统及软件环境

Windows10系统Windows10-64bit 因为官网下载超级无敌巨慢,所以下面这几个文件我放的是自建站网盘链接(我全安装左边的)。
Visual StudioVisual Studio Community 2019
Cmakecmake-3.19.2-win64-x64.msi || cmake-3.19.2-win64-x64.zip
OpenCVopencv-4.5.1-vc14_vc15.exe || opencv-4.5.1.zip
OpenCV_contribopencv_contrib-4.5.1.zip
CUDA驱动最新版驱动 (一般电脑都安装了) MinGW和Cmake、OpenCV的下载安装都没有什么坑,我从CUDA工具包开始说起吧。 CUDA工具包:在安装好CUDA驱动后打开NVIDA控制面板,菜单栏的帮助→系统信息→组件→3D设置→NVCUDA64.DLL可以看到自己显卡所支持的CUDA Toolkit
我的弟弟 GTX1050Ti 表面上看最高支持 cuda_11.0,但是我安装失败了(流下穷人的泪水),于是下载了一个 cuda_10.2 安装成功了。
此时win+R运行 cmd 输入 nvcc -V 能够看到安装的CUDA版本,说明安装成功!
下载对应cuda版本相应的cuDNN 需要登录,我选择的是Download cuDNN v8.0.5 (November 9th, 2020), for CUDA 10.2 的 cuDNN Library for Windows (x86) 下载完cuDNN 后把 cuDNN 里中的 bin, include, lib里的文件粘贴到cuda toolkit对应的文件夹C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA

添加系统变量

CUDA_PATH: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
CUDA_PATH_V10_1: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
CUDA_BIN_PATH: %CUDA_PATH%\bin CUDA_LIB_PATH: %CUDA_PATH%\lib\x64
CUDA_SDK_PATH: C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2
CUDA_SDK_BIN_PATH: %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH: %CUDA_SDK_PATH%\common\lib\x64

新增到系统变量的PATH

%CUDA_BIN_PATH%
%CUDA_LIB_PATH%
%CUDA_SDK_BIN_PATH%
%CUDA_SDK_LIB_PATH%

配置完成后,使用 CUDA 的内置工具验证配置是否成功。win+R 启动 cmd,然后 cd 到安装目录 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\demo_suite 下,分别执行 deviceQuery.exebandwidthTest.exe,输出信息如下:看到Result = PASS就表示 CUDA 配置成功!

OpenCV4.5和CUDA的编译

打开 Cmake(cmake-gui),设置OpenCV的源码目录和编译输出目录,点击Configure。这里的编译输出目录需要注意!我一开始设置的编译输出目录如图所示,这是不正确的,我编译好了后才把编译目录移动到了 D:\Code\OpenCV\opencv-4.5.1\cuda_build\。建议一开始就在opencv目录下建个新build文件夹

选择自己的VS版本点击Finish

第一次config 完成后,找到列表中的“BUILD_TESTS”、“BUILD_PERF_TESTS”和“BUILD_EXAMPLES”,如果打勾则把勾去掉,目的是为了缩短最后生成解决方案的时间。然后我把所有的带有 CUDA 的都钩上了。
找到列表中的“OPENCV_EXTRA_MODULES_PATH”,设置为opencv_contrib源码包中的modules目录,我的目录是“D:/Code/OpenCV/opencv_contrib-4.5.1/modules”。
再次点击Configure,会出现Configuring done,接着点击Generate,出现Generating done
然后点击Open Project,它会启动你的Visual Studio,打开解决方案后一定要等待左下角显示的项全部加载完毕才可以继续操作,接着找到“CmakeTargets”下的“ALL_BUILD”,右键→“生成”,然后开始漫长的等待……如果这个过程中有极个别几个项目生成失败,千万不必担心,可以到相关的modules路径下找到生成失败的模块,打开对应的.sln解决方案,重复这个步骤操作就可以弥补回来。如果这个过程中失败的项目太多建议重新开始,因为会直接导致下个步骤失败。
经过近两个小时的等待终于全部生成成功!现在就差最后一步。找到“CmakeTargets”下的“INSTALL”,右键→“仅用于项目”→“仅生成INSTALL”。 全部生成成功后我们会发现,在编译输出目录下多了一个“install”目录,这个就是我们需要的。此时需要将D:\Code\OpenCV\opencv-4.5.1\cuda_build\install\x64\vc16\bin添加到环境变量重启计算机,否则在后面的测试过程中将抛出异常。打开这个”install”文件夹之后你会发现它和原始OpenCV文件夹很像。只要按照之前的配置方法,新建解决方案后在属性管理器中把包含目录、库目录和附加依赖项配置好就可以使用包含Contrib扩展模块的GPU版OpenCV了。