Opencv Cuda编译

相关参考资料 #

编译相关文章 #

https://blog.csdn.net/iracer/article/details/125360183

https://www.cnblogs.com/guojin-blogs/p/17939955

https://zhuanlan.zhihu.com/p/354838274

https://blog.csdn.net/fixed_zhang/article/details/110930716

https://blog.csdn.net/yangyu0515/article/details/129643486

https://blog.csdn.net/yangyu0515/article/details/133794355

https://www.rwr.ink/index.php/2023/11/07/opencv-with-cuda%E7%BC%96%E8%AF%91%E5%AE%9E%E6%88%98/

OpenCV CUDA 安装 #

https://github.com/chrismeunier/OpenCV-CUDA-installation/blob/main/README.md#check-install-and-troubleshooting

Conda+PyTorch+OpenCV-contrib-cuda环境下,import cv2 出现dll找不到的问题 #

https://blog.csdn.net/zMGAM/article/details/138158027

解决opencv编译中出现的#error: This file was generated by an older version of protoc which is (编C1189译源文件)问题 #

https://blog.csdn.net/m0_58326153/article/details/142381832

https://github.com/opencv/opencv/issues/17389

https://blog.csdn.net/weixin_38934440/article/details/107093908

protoc下载地址

https://github.com/protocolbuffers/protobuf/tags?after=v3.29.3

实操准备 #

  • opencv 4.8.0

  • opencv_contrib

  • cmake 3.27.7

  • visual Studio 2019

  • cuda 11.8

    C:\Users\admin>nvcc -V
    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
    
  • python 3.11.9

  • video codec sdk 11.1.5

nvidia-smi
Mon Mar  3 11:45:44 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 571.96                 Driver Version: 571.96         CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3060      WDDM  |   00000000:01:00.0  On |                  N/A |
|  0%   52C    P5             41W /  170W |    1052MiB /  12288MiB |      1%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            8564    C+G   ...indows\System32\ShellHost.exe      N/A      |
|    0   N/A  N/A            8596    C+G   C:\Windows\explorer.exe               N/A      |
|    0   N/A  N/A            9740    C+G   ..._cw5n1h2txyewy\SearchHost.exe      N/A      |
|    0   N/A  N/A            9748    C+G   ...y\StartMenuExperienceHost.exe      N/A      |
|    0   N/A  N/A            9916    C+G   ...t\Edge\Application\msedge.exe      N/A      |
|    0   N/A  N/A           10260    C+G   ...xyewy\ShellExperienceHost.exe      N/A      |
|    0   N/A  N/A           10792    C+G   ...5n1h2txyewy\TextInputHost.exe      N/A      |
|    0   N/A  N/A           12224    C+G   ...8bbwe\PhoneExperienceHost.exe      N/A      |
|    0   N/A  N/A           13048    C+G   ....0.3065.82\msedgewebview2.exe      N/A      |
|    0   N/A  N/A           13152    C+G   ....0.3065.82\msedgewebview2.exe      N/A      |
|    0   N/A  N/A           15084    C+G   ...rm 2024.3.2\bin\pycharm64.exe      N/A      |
|    0   N/A  N/A           15236    C+G   ...ntrolPanel\SystemSettings.exe      N/A      |
|    0   N/A  N/A           15848    C+G   ...yb3d8bbwe\Notepad\Notepad.exe      N/A      |
|    0   N/A  N/A           16792    C+G   ...yb3d8bbwe\WindowsTerminal.exe      N/A      |
|    0   N/A  N/A           18064    C+G   ...crosoft\OneDrive\OneDrive.exe      N/A      |
|    0   N/A  N/A           18892    C+G   ...em32\ApplicationFrameHost.exe      N/A      |
+-----------------------------------------------------------------------------------------+

实测步骤 #

需要修改的配置项 #

OPENCV_ENABLE_NONFREE   用来启用非免费(non-free)算法的支持

true
OPENCV_EXTRA_MODULES_PATH    指定额外的 OpenCV 模块路径

C:/Users/admin/python/opencv_contrib-4.8.0/modules
WITH_CUDA   是否启用对 CUDA(NVIDIA 的并行计算平台和编程模型)的支持

true
OPENCV_DNN_CUDA  启用对 CUDA 加速的支持

true
OPENCV_DNN_OPENVINO 
启用 OpenCV DNN 模块对 OpenVINO™ 加速的支持。OpenVINO™(Open Visual Inference and Neural Network Optimization)是英特尔推出的深度学习推理加速工具包,旨在优化深度学习推理过程,特别是在英特尔硬件上(如 CPU、GPU、VPU 等)。

true 
BUILD_opencv_world
OpenCV 的所有核心模块(如图像处理、计算机视觉、DNN、机器学习等)会被编译成一个单独的库文件 

true
BUILD_opencv_python3 
是否为 Python 3 构建 OpenCV 绑定

TRUE
ENABLE_FAST_MATH
启用 ENABLE_FAST_MATH 会使 OpenCV 使用一些优化过的、快速但可能不完全精确的数学运算。例如,可能会使用 fast 的数学函数,牺牲一点精度来换取更快的运算速度。

待定
CUDA_ARCH_BIN   8.6;8.9

需要取消勾选的配置项 #

BUILD_JAVA

用来控制是否启用 OpenCV 的 Java 接口
BUILD_opencv_java_bindings_generator

用来控制是否生成 OpenCV Java 绑定的代码生成器
BUILD_opencv_js
OpenCV 会构建可以在浏览器中运行的 JavaScript 库,允许你在前端 Web 应用中使用 OpenCV 的功能
BUILD_opencv_js_bindings_generator
BUILD_PERF_TESTS 用来控制是否构建 性能测试
BUILD_TESTS  用来控制是否构建 OpenCV 的 单元测试
BUILD_opencv_python_tests 用来控制是否构建和运行 Python 单元测试
OPENCV_TEST_DNN_TFLITE  用于控制是否构建和运行 TensorFlow Lite 相关的 DNN(深度神经网络)测试
BUILD_CUDA_STUBS
OpenCV 会为 CUDA 相关的功能提供一个“假”的实现。这意味着,尽管你启用了 CUDA 支持,某些本应在 GPU 上执行的操作仍然会在 CPU 上执行。

false 

处理后续的报错,第一次尝试可不取消勾选

DBUILD_PROTOBUF=OFF 
用来控制是否 构建 和 启用 Protobuf 的支持。Protobuf(Protocol Buffers)是 Google 开发的一种高效的序列化数据格式,广泛应用于数据交换、存储以及网络通信等场景。
DBUILD_opencv_dnn=OFF   

用来控制是否启用和构建 DNN 模块(深度神经网络模块)。启用此选项后,OpenCV 会编译和安装 DNN 模块,允许你加载并运行深度学习模型进行推理。

处理后续的报错,第一次尝试可不取消勾选

DWITH_MSMF   
启用或禁用 Microsoft Media Foundation(MSMF)支持。
MSMF 是 Windows 平台上的多媒体框架,支持视频捕获、播放和编解码。
当启用 DWITH_MSMF=ON 时,OpenCV 的 videoio 模块会使用 MSMF 作为视频输入输出的后端(例如通过 cv2.VideoCapture 读取视频文件时优先使用 MSMF)。
WITH_OPENGL 
启用 OpenGL 支持,用于图形渲染(如实时显示 GPU 加速的帧)
WITH_VTK 
启用 VTK(Visualization Toolkit)支持,用于三维可视化和高级图像处理

错误处理 #

错误: #

问题:

C1189
#error:  This file was generated by an older version of protoc which is (编译源文件 C:\Users\admin\python\opencv-4.8.0\modules\dnn\misc\caffe\opencv-caffe.pb.cc)
opencv_world
C:\Users\admin\python\opencv-4.8.0\modules\dnn\misc\caffe\opencv-caffe.pb.h
17

解决办法:

DBUILD_PROTOBUF=OFF
DBUILD_opencv_dnn=OFF  

问题:

C2039
"in_place": 不是 "std" 的成员 (编译源文件 C:\Users\admin\python\opencv-4.8.0\modules\dnn\src\caffe\caffe_importer.cpp)
opencv_world
C:\ProgramData\anaconda3\Library\include\absl\utility\utility.h
83

解决办法:

跟上面一样,调整后就好了

INSTALL 错误 #

CMake Error at modules/python3/cmake_install.cmake:165 (file):
2>  file INSTALL cannot copy file
2>  "C:/Users/admin/python/2.27-10.08/lib/python3/Release/cv2.cp311-win_amd64.pyd"
2>  to
2>  "C:/Users/admin/AppData/Local/Programs/Python/Python311/Lib/site-packages/cv2/python-3.11/cv2.cp311-win_amd64.pyd":
2>  Permission denied.
2>Call Stack (most recent call first):
2>  cmake_install.cmake:232 (include)
2>
2>
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: 命令“setlocal
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: "C:\Program Files\CMake\bin\cmake.exe" -DBUILD_TYPE=Release -P cmake_install.cmake
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: :cmEnd
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: :cmErrorLevel
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: exit /b %1
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: :cmDone
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: if %errorlevel% neq 0 goto :VCEnd
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(155,5): error MSB3073: :VCEnd”已退出,代码为 1。

解决办法:

管理员权限问题,以管理员启动VS  再点生成  生成  生成   千万别点重新生成

问题:全部通过后,测试找不到指定模块

>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\site-packages\cv2\__init__.py", line 181, in <module>
    bootstrap()
  File "C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\site-packages\cv2\__init__.py", line 153, in bootstrap
    native_module = importlib.import_module("cv2")
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ImportError: DLL load failed while importing cv2: 找不到指定的模块。

解决办法:

发现某库缺失,检查cmake的一些属性链接,链接到了.conda/文件夹,卸载conda进行重试

取消勾选以下几项

DWITH_MSMF   
*启用或禁用 Microsoft Media Foundation(MSMF)支持。
MSMF 是 Windows 平台上的多媒体框架,支持视频捕获、播放和编解码。
当启用 DWITH_MSMF=ON 时,OpenCV 的 videoio 模块会使用 MSMF 作为视频输入输出的后端(例如通过 cv2.VideoCapture 读取视频文件时优先使用 MSMF)。

WITH_OPENGL *
启用 OpenGL 支持,用于图形渲染(如实时显示 GPU 加速的帧)

WITH_VTK *
启用 VTK(Visualization Toolkit)支持,用于三维可视化和高级图像处理

报错:

AttributeError: module 'cv2.dnn' has no attribute 'DictValue'

解决办法:

lib/python3.11/site-packages/cv2/typing/ init .py”文件中删除第 169 行来修复它,这似乎是问题所在

像这样注释掉第 169 行# LayerId = cv2.dnn.DictValue

https://github.com/facebookresearch/nougat/issues/40

大功告成,完美撒花

问题:在运行阶段报错

在cuda_reader = cv2.cudacodec.createVideoReader(video_file)
这里报错:error: (-213:The function/feature is not implemented) The called functionality is disabled for current build or platform in function 'throw_no_cuda'
',)

解决办法:

安装video codec sdk 11.1.5

复制C:\Users\admin\Downloads\Video_Codec_SDK_11.1.5\Lib\x64 下的文件到 
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\lib\x64
复制C:\Users\admin\Downloads\Video_Codec_SDK_11.1.5\Interface  下的文件到
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\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:1075 (include)

解决办法:

删除配置选项OPENCV_GENERATE_SETUPVARS

https://stackoverflow.com/questions/58361443/cmake-will-raise-opencvgensetupvars-cmake-error-when-configure-opencv