好像没什么详细的教程,当然需要这方面的也确实少,但是后来已经不在乎用不用了,就想把这个事情搞成功...总之研究一下,就当多了解个知识点吧,万一用上了呢,万一有人和我一样想弄成功呢

整个过程也是有点曲折,所以这是一个按照时间线的流程记录,如果想参考,请全看完再跟着做,因为有callback

我参考的教程:

https://mp.weixin.qq.com/s/ZOukYMzNA5_TCN2KMVttPA

https://blog.csdn.net/weixin_57669670/article/details/143416300

我的前置配置:

OpenCV 4.12.0

CUDA 12.8

cuDNN 8.9.7.29

GPU RTX5070TI

visual studio2022

0.下载安装cmake

cmake下载,版本是最新的4.2.1:https://cmake.org/download/

注意是点的msi文件安装包

附:在vscode中配置中文/python并且关联anaconda3:

ctrl+shift+x:调出资源面板,搜索chinese,下载中文简体扩展插件,然后屏幕右下角use language and restart,重启vscode就中文了

依旧ctrl+shift+x:资源面板搜索python,install第一个最简单的python,然后打开或者创建一个python项目,然后在顶部搜索栏或者使用ctrl+P打开搜索栏,搜索> select interpreter选择anaconda3的python就可以,运行程序会自动开启anaconda环境,所以第一遍运行会报错,但会自动执行第二遍程序,输出正常结果

1.下载OpenCV和contrib包

contrib包需要注意与OpenCV的版本对应

opencv源码下载,我这里下载的版本是最新的4.12.0:https://opencv.org/releases/

注意opencv下载的是主包,不是windows应用

opencv_contrib下载,版本也是对应opencv的4.12.0:https://github.com/opencv/opencv_contrib/tags

为了下载速度,使用了科学上网,但也还是慢,关了科学上网反而快了

2.使用cmake进行编译

两个文件下载完成后,解压,将解压的两个文件夹放到了一个单独的文件夹里,然后在这个文件夹里又新建了一个opencv_cuda_build文件夹,用来存放编译后的内容

在CMake中选择好要编译的opencv源码的路径/编译完后的输出路径,然后在Configure中选择了visual studio版本,鉴于CMake里面已经支持VS2026了,所以尝试2026的

(但是导出执行第4步后在2026里配置不成功,所以又重新改成2022做了一遍接下来的流程。)

configure报错说找不到vs2026

这是因为vs组件不全,重新打开visual studio installer,添加了C++开发和cmake支持组件,就可以编译了

编译之前打开科学上网,否则会出很多文件下载失败的bug,打开了也会出bug,但是少.

2.1第一次configure

遇到的bug:

(1)无法查找到我的visual studio版本,这个bug和上面刚写那个问题不一样

(虽然针对vs2026编译过程中的这个bug解决了,但是在配置进vs2026的时候还是遇到了版本不匹配的问题,所以最终还是使用vs2022完成的。但是可以为版本问题提供一些解决思路)

因为第一次尝试的时候下载的是最新的visual stuido2026,对应的版本号是v18.+,搜索OpenCVDetectCXXCompiler.cmake文件打开可以发现,虽然图形化界面可以选vs2026,但是这个配置文件里并没有对应的这一部分

但是像我一样莽的人还是少,搜索并没有发现有人遇到这个bug,于是只能参考vc17报错的方式,尝试解决,也就是在代码后仿写了关于vc18的:

(2)找不到nvpl库的文件

这个错误也是一开始有点懵,查了我的CUDA安装目录里也没有这两个配置文件,还以为CUDA没安好,但是安装验证以及后续使用明明是没问题的,于是又研究了一下才明白,nvpl并不是必须的,只是在编译时设置成了首选依赖而已,没有nvpl完全不会影响opencv使用,甚至opencv官方也比较认可并推荐不使用nvpl。因此这也仅仅只是一个warning而不是error

尝试解决的方法是:

(3)尝试自动下载 FFmpeg 相关的文件失败

FFmpeg是videoio功能相关的部件,忽略这个warning继续编译的话,不会影响opencv使用,但是如果后面想用这个做视频处理,可能就会有问题,本着一劳永逸的想法,还是尝试解决一下。

解决方法:手动根据链接下载了对应的文件,打开D:\InstalPackages\openCVCuda\opencv-4.12.0\opencv-4.12.0\.cache\ffmpeg路径,能看到对应的带着哈希值的文件名(这个哈希值不管编译几次都不会变的,一旦有了就固定了),但是文件大小是不对的,因为没下载成功或者没下载全。

把自己手动下载的文件名称改成一样的,然后复制到这里,替换原来的文件即可。

(4)关于install()方法的警告

可以在CMakeLists.txt中关于cmake policy的部分添加cmake_policy(SET CMP0177 NEW)来解决,也可以通过执行命令时添加 -Wno-dev 来忽略这个warning。

总之是个warning,所以我没改配置文件,无视了

2.2在cmake中勾选配置

搜索cuda,勾选

搜索example,勾选(就是下载一些案例,不勾也行,不影响)

搜索non,勾选

搜索mod,然后把contrib路径放上,要一直写到models(路径需要正斜杠,不能反斜杠,所以直接使用界面的文件选择最好,不要自己手动输入

2.3第二次configure

第二次在configer过程中出现了error对话框

不要慌,这是因为有些配置出现了问题,ok之后看具体的问题就行了:

(1)找不到我的GPU架构

不是GPU有问题,也不是安装有问题,是配置项没设置或者没勾选

鉴于前面已经把with_cuda勾选上了,于是搜索CUDA_ARCH_BIN和CUDA_ARCH_PTX,如果没有,直接手动添加。这两个的值都是string,然后填上自己的gpu算力。(vs2026编译的那次,这两个属性是手动添加的,vs2022编译的时候,就自动有了。截图里是vs2026我手动添加的)

算力从https://developer.nvidia.com/cuda/gpus查找。

然后我这里就没有其它红色报错了,于是:

2.4第三次configure

这次的问题有:

(1)出现了video相关的错误,如果自己的开发过程中不需要video处理,可以把这两个配置改成off就行

但我还是想配置上万一后续要用,于是首先在NVIDIA官网下载最新的VIDEO CODE SDKhttps://developer.nvidia.com/video-codec-sdk/download

然后解压到合适的位置,我解压到了D:\NVIDIA_Video_Codec_SDK_13.0.37

然后在cmake-gui中设置

当然这里我又搜不出来,于是手动添加的name和value

然后又确保了这四个配置勾选:

WITH_CUDACODEC也是没有,还是手动添加的

(然后再config之后发现这个warning还是没被解决,可能是因为我的SDK版本太新了不匹配,如果想解决的话降个低版本SDK然后再配置一下path应该就行,我烦了,所以直接:WITH_CUDACODEC = OFF
WITH_NVCUVID   = OFF
WITH_NVCUVENC  = OFF

(2)依旧是文件下载超时的错误,这次是另一个文件face_landmark_model

还是自己下载下来,根据.catch文件夹里的文件名改好名字

这个文件在..\opencv-4.12.0\.cache\data路径里

2.5第四次configure

继续勾选配置

搜索type,把CMAKE_CONFIGURATION_TYPES的值修改成只有Release

然后再configure,除了可以忽略的那几个,就没有我想要解决的warning了。

所以configure的次数并不是必须的,只要能把该配置的选项都配置了,并且解决掉不可以忽视的那些error和warning就可以不再configure了

3.生成工程

generate,完成之后点open project,用visual studio打开工程

然后上方选择Release,x64

再资源管理器里搜索ALL,找到ALL_BUILD文件,右键,选择生成

生成需要花费一些时间。

这里再重复一遍,使用vs2026的时候在生成的时候出现了错误:

这些错误都是因为版本问题。

4.推翻重做第一次(失败

换了vs2022重新从头做了一遍,当然速度快了很多,基本就是等待编译

但在2022中进行编译依旧报了很多的错误

5.推翻重做第二次(成功

又参考了这篇文章的配置:

https://blog.csdn.net/weixin_57669670/article/details/143416300

这篇的配置比较少:

第一次configure后:

OPENCV_EXTRA_MODULES_PATH

搜索cuda相关的全ON

test相关的全OFF

第二次configure后:

CUDA_FAST_MATH=ON

CUDA_ENABLE_DEPRECATED_GENERATION=OFF

第三次configure后:

BUILD_opencv_wechat_qrcode=OFF

BUILD_opencv_face=OFF

每次configure有错误还是和上面一样处理就行了,我这已经没错误了,所以完成之后就直接generate

然后再次执行vs中进行编译的步骤:

正常的这个过程是很慢的,以小时为单位

最后看到0失败0跳过就是编译完了

然后INSTALL也右键生成

这一步很快

然后在存放openCV CUDA build的目录中,..install\x64\vc17\lib下可以看到这些cuda相关的文件:

6.配置系统环境变量

(1)添加用户变量

(2)修改系统变量path,添加:

第二条的vc17要根据自己的版本来写

这样就全部完成了。

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐