商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > OpenCV4.7+CUDA11.2+Python3.9.x环境搭建的实现步骤

OpenCV4.7+CUDA11.2+Python3.9.x环境搭建的实现步骤

  发布于2026-07-19 阅读(0)

扫一扫,手机访问

目录

  1. 准备工作
  2. CMake 编译
  3. VS 编译
  4. 验证
  5. 常见问题解决
  6. 附录:CMake 配置日志

OpenCV 作为计算机视觉领域最常用的开源库,早已覆盖了从图像处理到深度学习推理的方方面面。它支持 C++、Python、Ja va 等多种语言,而 Python 接口(即 OpenCV-Python)更是让数据科学家们爱不释手。不过,纯 CPU 运算在大量图像数据面前往往力不从心。好在 OpenCV 的 GPU 模块(基于 CUDA 编写)可以直接调用 NVIDIA 显卡的并行计算能力,让图像处理速度提升一个数量级。

然而,把 OpenCV 的 CUDA 支持编译到 Python 环境里,并不是一件点几下鼠标就能搞定的事。从源码编译到配置路径,再到解决各种离奇报错,每一步都可能让人想摔键盘。本文就把整个流程拆开揉碎,从硬件检测到最终验证,帮你避开所有常见的坑。

Ⅰ、准备工作

硬件环境

  • 需要一张 NVIDIA 显卡(N 卡),这是前提条件。

软件环境

  1. 下载 OpenCV 源码:opencv-4.7.0.tar.gz
    • 下载地址:OpenCV Releases
  2. 下载 OpenCV Contrib 源码:opencv_contrib-4.7.0.zip
    • Gitee 镜像:qianjide/opencv_contrib
    • GitHub 官网(若无法访问):opencv/opencv_contrib

目录结构说明:把代码解压到指定目录(例如 E:\code\external\opencv47)。

重要提示:源代码目录下必须事先拷贝好 .cache 文件夹,以避免编译时下载失败。

  1. 安装 CMake:推荐版本 cmake-3.26.0-windows-x86_64.msi。
  2. 安装 Anaconda:推荐 Anaconda3-2022.10-Windows-x86_64.exe。
  3. 安装 CUDA 开发工具包:经过对多个 CUDA SDK 版本的测试,编译结果如下表:
CUDA 版本OpenCV 4.7.0OpenCV 4.10.0OpenCV 4.12.0
cuda-v11.2 & cudnn8.1.0
cuda-v12.4 & cudnn8.9.7
cuda-v12.6 & cudnn8.9.7
  1. 安装 Visual Studio 2019。

Ⅱ、CMake 编译

1. 打开 cmake-gui

安装好 CUDA 和 Anaconda 后,打开 CMake 界面,设置 OpenCV 源码路径(Source Code)和构建路径(Build)。

注意:

  • 如果要编译 Anaconda 内非默认虚拟环境的 Python,建议先暂时重命名 base 环境下的 python.exe 和 libs/python312.lib,防止 CMake 错误识别。
  • 如果本地安装了多个版本的 CUDA SDK,需要先将环境变量 CUDA_PATH 等设置成当前要编译的 CUDA 版本。

第一次点击 Configure,选择 Visual Studio 16 2019 和 x64 架构,点击 Finish。第一次编译完成后,进行以下配置:

  1. 编译 World 模块:在 Search 框搜 world,勾选 BUILD_opencv_world。这将把所有 OpenCV 库编译在一起,无需单独添加每个小模块。
  2. 启用非自由算法:在 Search 框搜 NON,勾选 OPENCV_ENABLE_NONFREE。

2. 设置 Python 路径

此步骤旨在将 CUDA 版本的 OpenCV 安装到 Python 环境中。

  1. 构建 Python 绑定:在 Search 框搜 BUILD,勾选 BUILD_opencv_python3(若搜索不到需手动添加)。

环境确认:确认当前使用的 Python 环境(如 Anaconda base 或自定义虚拟环境)已安装 numpy(编译必需):

conda list
pip3 install numpy

手动设置路径:由于虚拟环境可能未添加到系统环境变量,CMake 可能无法自动找到 numpy 头文件等路径。需在 CMake 界面手动设置以下变量(以 Python 3.11 和 3.8 为例):

  • Python 3.11 示例:

    • PYTHON3_EXECUTABLE: D:/tools/anaconda3/envs/py3_11/python.exe
    • PYTHON3_INCLUDE_DIR: D:/tools/anaconda3/envs/py3_11/include
    • PYTHON3_LIBRARY: D:/tools/anaconda3/envs/py3_11/libs/python311.lib
    • PYTHON3_NUMPY_INCLUDE_DIRS: D:/tools/anaconda3/envs/py3_11/Lib/site-packages/numpy/core/include (低版本 numpy) 或 .../numpy/_core/include (高版本 numpy)
    • PYTHON3_PACKAGES_PATH: D:/tools/anaconda3/envs/py3_11/Lib/site-packages
  • Python 3.8 示例:

    • PYTHON3_EXECUTABLE: D:/tools/anaconda3/envs/py3_8/python.exe
    • PYTHON3_INCLUDE_DIR: D:/tools/anaconda3/envs/py3_8/include
    • PYTHON3_LIBRARY: D:/tools/anaconda3/envs/py3_8/libs/python38.lib
    • PYTHON3_NUMPY_INCLUDE_DIRS: D:/tools/anaconda3/envs/py3_8/Lib/site-packages/numpy/core/include
    • PYTHON3_PACKAGES_PATH: D:/tools/anaconda3/envs/py3_8/Lib/site-packages

3. 设置 CUDA

  1. 添加 Contrib 模块:在 Search 框搜 MODULES,在 OPENCV_EXTRA_MODULES_PATH 项中,添加 opencv_contrib 源码中的 modules 目录。

    • 路径示例:E:/code/external/opencv_contrib-4.7.0/modules
    • 注意:必须使用正斜杠 / 或双反斜杠 \\。若不设置,会报错:CUDA: OpenCV requires enabled 'cudev' module from 'opencv_contrib'。
  2. 启用 CUDA 支持:在 Search 框内输入 CUDA,勾选以下两项:

    • WITH_CUDA
    • OPENCV_DNN_CUDA
    • (BUILD_CUDA_STUBS 可选,通常不勾选)

    关于 cuDNN:如果忘记将 cuDNN 解压到 CUDA SDK 目录内,解压后必须在 CMake 中点击 Delete Cache 然后重新 Configure,否则会报找不到 cuDNN。

    关于 Nvidia Video Codec SDK:

    • 若不需要视频编解码功能,可在 CMake 中取消勾选 WITH_NVCUVID 与 WITH_NVCUVENC。
    • 若需要,需下载 Nvidia Video Codec SDK,解压后将 Lib 和 Interface 中的文件分别复制到 CUDA Toolkit 的 lib 和 include 目录中。

    设置完成后,再次点击 Configure,直到下方日志显示 Configure done。

  3. 数学优化:搜索框输入 fast,勾选 ENABLE_FAST_MATH 和 CUDA_FAST_MATH。

    • 注:启用此选项可能会牺牲少量精度以换取更快的浮点运算速度。
  4. 设置显卡算力:搜索框输入 cuda,找到 CUDA_ARCH_BIN。

    • 根据显卡型号修改算力值。例如 GTX 1060 对应的算力为 6.1。
    • 删除其他不需要的算力版本,仅保留 6.1(或多张显卡对应的算力值,用空格分隔)。

4. 设置 ICONV 库

确保相关配置无误后,点击 Generate 开始生成工程,直到出现 Generating done!。

5. 常见警告和错误处理

(1) 模块下载失败

  • 现象:Configure 时在 .cache 文件夹下生成的文件大小为 0kb,或 CMake 输出下载失败警告。
  • 原因:网络问题导致无法从 GitHub 等源下载依赖文件。
  • 解决:
    1. 查看 D:\build\opencv47\CMakeDownloadLog.txt 获取失败文件的下载链接。
    2. 手动下载这些文件。
    3. 将下载的文件重命名为 .cache 文件夹中对应的文件名并覆盖。
    4. 建议准备一份包含完整 .cache 文件的源码包,避免后续反复下载。
    • 注意:不要注释掉 CMakeLists.txt 中的下载语句,否则不会生成必要的缓存文件结构。应注释或删除的是“清理缓存”相关的语句(如果有)。

(2) 警告:OPENCV_GENERATE_SETUPVARS

  • 解决:在搜索框中输入 OPENCV_GENERATE_SETUPVARS,去除勾选,重新 Configure。

(3) 路径格式错误

  • 现象:Configure 报错,提示 OPENCV_EXTRA_MODULES_PATH 路径错误。
  • 解决:确保路径使用正斜杠 / 或双反斜杠 \\,例如 E:/code/external/opencv_contrib47/modules。

(4) Python 未被正确识别

  • 现象:CMake 未能找到正确的 Python 环境。
  • 解决:临时重命名 Anaconda base 目录下的 python.exe 和 libs/python3xx.lib,让 CMake 在首次 Configure 时忽略它们,然后手动指定虚拟环境的路径。

(5) cuDNN 版本不匹配

  • 现象:报错提示 cuDNN 版本与 CUDA 不兼容。
  • 解决:清除 CMake 缓存并重新 Configure。如果修改了环境变量,需重启 CMake GUI 以生效。

Ⅲ、VS 编译

1. 编译源码

  1. 点击 CMake 中的 Open Project,启动 Visual Studio 2019 加载生成的解决方案。
  2. 等待加载完毕,顶部工具栏选择 Release 和 x64。
  3. 在“解决方案资源管理器”中,找到 CMakeTargets -> ALL_BUILD。
  4. 右键点击 ALL_BUILD -> “生成”。
  5. 编译过程可能需要一小时左右,直到输出显示全部成功。
    • 检查:确保在 bindings 目录下生成了 opencv_python3 项目,否则无法在 Python 中使用 CUDA 加速。

2. 安装库到 Python

  1. 在“解决方案资源管理器”中,找到 CMakeTargets -> INSTALL。
  2. 右键点击 INSTALL -> “生成”。
  3. 等待结束后:
    • 在构建目录的 lib\python3\Release 下可看到 cv2.cp39-win_amd64.pyd (版本号可能不同)。
    • 在 Python 环境的 Lib\site-packages 目录下(如 D:\rady\anaconda3\Lib\site-packages),应能看到 cv2 文件夹及相关文件。

至此,Python 环境的 GPU 版本 OpenCV 已安装成功。

3. 编译报错解决

  • 错误:无法解析的外部符号 cv::xfeatures2d::VGG::getDefaultName
  • 原因:源代码目录下的 .cache 文件夹内文件缺失或损坏(通常因网络下载失败导致)。
  • 解决:将事先准备好的完整 .cache 文件夹覆盖到源码目录 E:\code\external\opencv47 下。

Ⅳ、验证

验证方法

方法一:命令行验证

打开 Anaconda Prompt 或 CMD,运行以下代码:

import cv2
print(cv2.__version__)
print(cv2.cuda.getCudaEnabledDeviceCount())

或者一行命令:

python -c "import cv2;print(cv2.__version__);print(cv2.cuda.getCudaEnabledDeviceCount());"

如果输出了版本号且设备计数大于 0,则安装成功。

方法二:Jupyter Notebook 验证

在 Jupyter Notebook 中新建单元格,运行上述 Python 代码进行验证。

验证失败常见问题

(1) import cv2 报错(转义字符问题)

  • 现象:导入时报错,路径相关错误。
  • 原因:config.py 文件中使用了 Windows 反斜杠 \ 作为路径分隔符,导致转义错误。
  • 解决:打开 config.py 和 config-3.xx.py 文件(通常位于 site-packages/cv2 目录下),将所有反斜杠 \ 改为正斜杠 /。

(2) Python 版本冲突

  • 现象:本地 Python 版本与虚拟环境目标版本冲突。
  • 解决:
    1. 设置环境变量 PYTHON_EXECUTABLE3 指向虚拟环境内的 python.exe。
    2. 重启资源管理器 (explorer.exe) 或重启电脑。
    3. 检查注册表项:
      • 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\3.8\PythonPath
      • 计算机\HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\${_CURRENT_VERSION}\InstallPath

(3) 多次 import 报错

  • 现象:首次 import 失败,修改配置后仍需重启 Shell。
  • 解决:修改配置文件后,务必完全退出 Python Shell(运行 quit())并重新进入,或直接重启 IDE/终端。

(4) 多虚拟环境与多 CUDA 版本

  • 若存在多个虚拟环境对应不同 CUDA 版本,需确保当前激活的环境变量(特别是 CUDA_PATH)与编译时使用的版本一致,或在切换环境时动态调整。

附录:CMake 3.26 配置日志记录 (摘要)

Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.17134.
Detected processor: AMD64
CMAKE_VERSION: 3.26.0
CMAKE_SYSTEM: Windows-10.0.17134
CUDA detected: 11.2
CUDA: Using CUDA_ARCH_BIN=6.1
CUDA NVCC target flags: -gencode;arch=compute_61,code=sm_61;-D_FORCE_INLINES
...
General configuration for OpenCV 4.7.0 =====================================
  Version control:               703f139
  Extra modules:
    Location (extra):            D:/code/external/opencv_contrib47/modules
  Platform:
    Host:                        Windows 10.0.17134 AMD64
    CMake:                       3.26.0
    CMake generator:             Visual Studio 16 2019
    MSVC:                        1929
  NVIDIA CUDA:                   YES (ver 11.2, CUFFT CUBLAS FAST_MATH)
    NVIDIA GPU arch:             61
  cuDNN:                         YES (ver 8.1.0)
  Python 3:
    Interpreter:                 D:/rady/anaconda3/python.exe (ver 3.9.13)
    Libraries:                   D:/rady/anaconda3/libs/python39.lib
    numpy:                       .../numpy/core/include
    install path:                D:/rady/anaconda3/Lib/site-packages/cv2/python-3.9
  OpenCV modules:
    To be built:                 aruco barcode ... world xfeatures2d ...
    Non-free algorithms:         YES
-----------------------------------------------------------------
Configuring done (33.5s)
Generating done (41.5s)
本文转载于:https://www.jb51.net/python/362216l88.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注