Windows11环境下RTX3060的opencv4.10编译环境
Windows11环境下RTX3060的opencv4.10编译环境
环境
| 系统 | windows11 |
|---|---|
| visual studio | 11.8 |
| python | 3.9.x |
| opencv | 4.10 |
| opencv_contrib | for opencv4.10 |
| visual studio | vs2019 |
| CMake | 3.26.0 |
下面提供所有软件的安装包的百度网盘地址:
链接:https://pan.baidu.com/s/1Vk52DMUiqDJx4l9KhTkdlw
提取码:6vvq
CUDA版本
CUDA选择,可用的CUDA版本有很多,这里选择CUDA11.8,不同的显卡有不同的CUDA兼容,可以查看最大兼容版本,这里就不放链接了
关于OpenCV与CUDA的兼容性如下(下面复制备份):
版本匹配与环境配置
CUDA与OpenCV版本兼容性
OpenCV各版本对CUDA的支持存在差异,例如OpenCV 4.5.4需搭配CUDA 10.02,而较新的OpenCV 4.8.0需使用更高版本CUDA。
需注意部分模块(如级联检测器)可能因CUDA版本更新而不再支持。
OpenCV 版本 CUDA版本
- 4.5.x 推荐 CUDA 11.x 及以下版本。但需注意纹理功能兼容性(如 CUDA 12.0 可能因纹理接口变更导致编译失败)。
- 4.6.x 不兼容 CUDA 12.0+,需搭配 CUDA 11.x 或更早版本。
- 4.7.x 及以上 支持 CUDA 12.0+,建议优先选择 OpenCV 4.7+ 搭配 CUDA 12.0+ 以解决接口不匹配问题。
- 4.8.x 推荐 CUDA 11.x 或 12.x,需结合具体功能需求选择。
- 4.10.x 推荐 CUDA 11.x 或 12.x,需结合具体功能需求选择
验证CUDA环境时,可通过nvidia-smi命令查看当前驱动支持的CUDA版本。
编译与环境要求
1、编译器兼容性
CUDA 8.0+ 需搭配 VS2012 及以上版本5;CUDA 12.0+ 建议使用 VS2019,避免使用 VS2022(因 CMake 生成器可能不支持)。
2、OpenCV依赖库配置CMake参数:需启用WITH_CUDA选项,并指定OpenCV主仓库与opencv_contrib模块路径。
3、硬件与驱动NVIDIA 显卡需支持 CUDA,且安装与 CUDA 版本匹配的驱动程序。
显卡型号 推荐驱动版本 最高支持CUDA版本
40系显卡 ≥535.86.05 CUDA 12.34
30系显卡 ≥470.82.01 CUDA 11.75
20系显卡 ≥450.80.02 CUDA 11.07注意事项:
驱动版本需≥CUDA工具包的最低要求(如CUDA 12.x需驱动≥535.86.05)。 多版本共存:可通过/usr/local/cuda-xx.x路径管理不同CUDA版本,避免环境变量冲突。
常见问题与解决
1、编译报错示例
若出现 common.hpp 纹理相关错误(如 OpenCV 4.6.0 + CUDA 12.0),需升级至 OpenCV 4.7+ 或降级 CUDA 版本。
2、多版本冲突
安装多版本 OpenCV 时(如同时存在 3.x 和 4.x),需指定不同安装路径以避免 CUDA 依赖冲突。
3、链接器错误
若提示未解析的外部符号,需检查是否遗漏 CUDA 相关库(如 cudart)或排除冲突的预编译库(如 world 模块)。OpenCV中CUDA加速功能
OpenCV中可通过CUDA加速的模块包括:
图像处理(灰度转换、滤波等)
视频编解码
光流法
对象检测(部分模型)
双目视觉处理。
执行nvcc --version显示如下即可
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed\_Sep\_21\_10:41:10\_Pacific\_Daylight\_Time\_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda\_11.8.r11.8/compiler.31833905\_0
Cudnn
CUdnn的选择最简单,随便找一个兼容的就行,解压后把bin等文件夹复制到C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.8路径下
运行C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.8\\extras\\demo\_suite下的bandwidthTest和deviceQuery两个文件,显示Pass即可
OpenCV
OpenCV版本选择,选择了4.10比较新的版本,但是最高支持python3.9,因此在安装miniconda的时候我选择了默认3.9版本的miniconda,这个可以去镜像网站找
镜像站:Anaconda
OpenCV Contrib
OpenCV Contrib选择,选择适配OpenCV4.10的
Visual Studio
Visual Studio 安装的2019版,具体安装模块自己选择。
CMake
CMake选择3.26.0
MiniConda
Python选择安装默认版本为python3.9(清华镜像)的miniconda
上述软件安装完成后参考OpenCV+Cuda编译的保姆级教程进行编译安装即可
总的来说,就是要选对cuda版本,以及opencv4.10最高支持python3.9
原本使用vs2022对应cmake3.26,可是在后续编译的时候无法编译,于是切回2019。
后续问题方案
问题一
Found NVCUVID: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.8/lib/x64/nvcuvid.lib
Found NVCUVENC: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.8/lib/x64/nvencodeapi.lib
CUDA detected: 11.8
CMake Error at cmake/OpenCVDetectCUDAUtils.cmake:297 (list):
list GET given empty list
Call Stack (most recent call first):
cmake/OpenCVDetectCUDA.cmake:76 (ocv_set_cuda_arch_bin_and_ptx)
cmake/OpenCVFindLibsPerf.cmake:46 (include)
CMakeLists.txt:812 (include)
去官网查找显卡的计算能力(笔记本30系为8.6),添加cuda架构
如果在终端cmake,可以添加
-D CUDA_ARCH_BIN=8.6 -D CUDA_ARCH_PTX=8.6
如果使用cmake-gui,可以在configure后,点击add entry,
name 分别输入CUDA_ARCH_BIN、CUDA_ARCH_PTX,type选择string,value输入你的显卡计算能力。
注意这里可能会失效,输入后查询后看看是否还有8.6
原文链接:Cuda CMake错误: list GET given empty list
问题二
上面的问题处理完后,会出现cudacodec的相关问题,以及setupvars的相关问题,这里没有截图,解决方法如下:
WITH\_NVCUVENC、WITH\_NVCUVID以及OPENCV_GENERATE_SETUPVARS三个选项取消勾选
前两个也可以选择安装那个缺少的SDK来进行解决,看你是否需要那个加速。
原文链接:如何去掉cmake编译OpenCV时的Cmake Warning:“OpenCVGenSetupVars.cmake:54”

浙公网安备 33010602011771号