相关参考资料 #
-
安装python
原生python官网下载地址,选择Windows版本。
-
cmake安装
其他版本下载地址:https://cmake.org/files/
-
opencv下载
Opencv官方下载地址,下载OpenCV – 4.8.0 Sources,下载解压opencv-4.8.0.zip
-
opencv_contrib
opencv_contrib官方下载地址,选择opencv对应的contrib版本,例如opencv4.8.0对应就是opencv_contrib-4.8.0.zip。下载后直接解压。
-
NUIDIA-cuDNN
-
visual studio 2019 16.11.43
https://learn.microsoft.com/en-us/visualstudio/releases/2019/history
编译相关文章 #
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 安装 #
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