1. 准备

2. VS中配置CUDA

安装CUDA时候会选择集成在VS中,安装之后有samples,试着跑一下测试下。关于库路径正常添加就可以了。


vs属性表中CUDA C/C++配置

3. cmake编译支持CUDA的opencv

3.1 configure 'opencv'

打开 cmake_gui.exe, 最上方两个文本框,分别输入 下载的"opencv/source" 的路径,和将要存储生成文件的路径,如"opencv_cmake"

然后点击 Configure,第一次会弹出下框,选择对应的版本即可。注意一定要联网,配置过程中需要下几个包。


cmake_gui

然后可能会出现个python的错误,忽略就行

CMake's 'find_host_package(PythonInterp 2.7)' founds wrong Python version:

PYTHON_EXECUTABLE=D:/Python3.8.1/python.exe

PYTHON_VERSION_STRING=3.8.1

Consider specify 'PYTHON2_EXECUTABLE' variable via CMake command line or

environment variables

Call Stack (most recent call first):

cmake/OpenCVDetectPython.cmake:271 (find_python)

CMakeLists.txt:585 (include)

下面这个错误也忽略

CMake Warning at cmake/OpenCVGenSetupVars.cmake:54 (message):

CONFIGURATION IS NOT SUPPORTED: validate setupvars script in install

directory

Call Stack (most recent call first):

CMakeLists.txt:947 (include)

这次Configure之后,对于opencv 4.0以上版本,在 cmake_gui 上搜索BUILD_opencv_world并勾选上,再Configure一下。

3.2 configure 'opencv_contrib'

搜索框中搜OPENCV_EXTRA_MODULES_PATH,并在之后的value中输入下载好的opencv_contrib/modules的路径。


添加opencv_contrib路径

然后再在搜索框中搜 cuda,对BUILD_CUDA_STUBS、WITH_CUDA和CUDA_FAST_MATH打勾


cuda相关选项

点击 Configure, 之后可以点击Generate。

之后会有CUDA_ARCH_BIN这个项,其后面的数字表示GPU支持的算力,要找对应的算力保留就行。例如Quadro P1000算力是6.1,GTX 2060-2080算力是7.5,部分笔记本显卡的算力情况如下图,其他可自查GPU Compute Capability


GPU Compute Capability

如果还需要 cuDNN,则在搜索框中搜索 BUILD_CUDA_DNN,打上勾,然后再Configure,之后在输出框框检查下,cuDNN后面要确保是 YES。


检查cuDNN是否为YES

之后检查输出框,确保没有除之前提到的两个错误外的其他错误后,然后点击 Generate,之后显示如下与cuda有关的项。


cuda相关项

3.3 编译生成INSTALL

点击 cmake_gui 上的 Open Project,进入VS,在解决方案资源管理器中找到"CMakeTargets",然后选择 "All_BUILD -> 右键"生成"。(debug 和 release 两个模式下都生成下,这一步根据电脑性能不同耗时不同,不过还是挺久的,建议找个1小时空闲期来编译)


编译opencv cuda库

然后选择"INSTALL -> 右键"仅用于项目" -> 仅生成INSTALL"。

之后在指定的文件夹 "opencv_cmake"下会有一个install文件夹,将该文件夹下的"./install/include", "./install/x64/vc15/lib", "./install/x64/vc15/bin", 添加至VS中响应位置即可。

其中"bin"目录若添加环境变量后仍显示无法找到动态链接库,则将该文件下的对应 debug 和 release 的 .dll 文件分别拷到工程的生成的 Debug 或者 Release 文件夹下。

Reference