Opencv 4.12.0 源码编译
依赖下载
VS2019
opencv-4.12.0
opencv_contrib-4.12.0
onnxruntime-1.18.1
onnxruntime-win-x64-gpu-1.18.1
cudnn-windows-x86_64-8.5.0.96_cuda11-archive
cuda_11.8.0_522.06_windows.exe
nasm-2.16.03-installer-x64
如果访问github下载慢可以访问https://github.akams.cn/加速
注意:必须下载VS2019,使用2022会编译不过,会报CUD版本必须高于12.0,文中中有些图片显示2022,就是因为我踩坑导致,所以各位同志注意一下
准备
nasm安装
安装nasm-2.16.03-installer-x64.exe后,设置系统环境变量中的path

cuda cudnn 安装
安装cuda_11.8.0_522.06_windows.exe
将下图所选整体复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8中

重启Cmake
Cmake配置
基础配置


新增CMAKE_DEBUG_POSTFIX变量
由于我不想debug加后缀d,所以这里新增CMAKE_DEBUG_POSTFIX string类型变量,不填写内容



OPENCV_EXTRA_MODULES_PATH
搜索框搜索OPENCV_EXTRA_MODULES_PATH,添加解压的opencv_contrib中的modules的路径

OPENCV_ENABLE_NONFREE
搜索并勾选OPENCV_ENABLE_NONFREE选项。

build_opencv_world
build_opencv_world可以将所有opencv的库都打包编译在一起,后续配置C++的opencv环境时不需要自己手动选择添加每个小模块

OPENCV_DNN_CUDA\OPENCV_DNN_OPENVINO
OPENCV_DNN_CUDA\OPENCV_DNN_OPENVINO☑️
CPU\GPU两种硬件加速模块


ENABLE_FAST_MATH☑️
用于启用快速数学计算模式,它会牺牲一些精度来换取计算性能的提升

“python”,“java”,“js”,“tests”
分别搜索“python”,“java”,“js”,“tests”,根据需要选中和取消相关选项,默认都是选中的,我们只需要c++相关的,因此都取消了,点击Configure。




BUILD_WITH_STATIC_CRT
BUILD_WITH_STATIC_CRT❌ 编译时不启用静态编译

OPENMP
WITH_OPENMP☑️
MKL_WITHOPENMP

CUDA 配置
CUDA☑️

CUDA_ARCH_BIN☑️
CUDA_ARCH_PTX:同CUDA_ARCH_BIN
CUDA_ARCH_BIN:NVIDIA GPU 计算架构版本 的关键编译参数,决定了 CUDA 程序(如 OpenCV 的 CUDA 模块)针对哪些 GPU 架构进行优化和兼容
CUDA_ARCH_BIN 用于指定编译后的程序支持哪些架构,例如:
6.1:支持 Pascal 架构(如 GTX 1080)
7.5:支持 Turing 架构(如 RTX 2080)
8.6:支持 Ampere 架构(如 RTX 3090)
8.9:支持 Ada Lovelace 架构(如 RTX 4090)
生成针对性优化代码
编译器(NVCC)会根据 CUDA_ARCH_BIN 生成对应架构的二进制代码(sm_xx),充分利用该架构的硬件特性(如 Tensor Core、新指令集等),提升运行性能
CUDA_ARCH_PTX:指定要生成 PTX 代码(Parallel Thread Execution,并行线程执行代码,是一种中间表示形式 )的 CUDA GPU 架构。PTX 代码可在不同架构的 GPU 上,由 CUDA 运行时及时编译(JIT)为二进制代码,以适配目标 GPU ,比如设置为 8.6,能让程序对该架构及后续兼容架构的 GPU 有更好的适配性 。

CUDA_ENABLE_DELAYLOAD☑️
启用 CUDA 延迟加载(Delay-Load)机制。

CUDA_USE_STATIC_CUDA_RUNTIME❌ 编译时不启用静态编译

onnx 配置
ONNX
启用ONNX,再次点击configure

将onnxruntime-1.18.1\include整体复制到onnxruntime-win-x64-gpu-1.18.1中,然后配置onnxrt_root_dir后再次点击configure

注意:ORT_EP_INCLUDE参数如果没有onnxruntime DirectML 版本的链接库不要填写,下一步的复制文件夹也不用做

将下图所示文件复制到指示的文件夹中

生成VS2019方案
点击Generate



.cache 依赖文件下载失败解决
由于网络问题,opencv依赖的库都会下载失败,这个时候需要我们手动下载
打开下图文件

其中#cmake_download 第一个是依赖是文件应该存放的位置与名称,第二个是下载地址
复制下载地址到浏览器下载

下载完成后将文件改名成一样的名称(所有手动下载的都需要这样改名)
注意:有些文件访问后是在网页中呈现,需要手动另存为文件才能过md5验证
也可以直接下载文章顶部的(适合opencv 4.12.0)

编译
报错解决
CUSTOMBUILD : nvcc warning : The 'compute_35', 'compute_37', 'sm_35', and 'sm_37' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).
这个报错可以忽略,只是提示后续会弃用较旧的 NVIDIA GPU型号
CUDA4DNN_CHECK_CUDNN(cudnnCreateConvolutionDescriptor(&descriptor));

这个报错是缺少zlibwapi.dll导致
770





