Windows 11+Visual Studio 2022 环境OpenCV+CUDA 12.5安装及踩坑笔记

周六日在家捣腾了一下,把过程记录下来。

前置条件

  1. Visual Studio C++ 生成工具
  2. 和本机显卡适配的CUDA
  3. 与CUDA匹配的cuDNN
  4. Python 3
  5. NumPy
  6. OpenCV源代码以及对应版本的OpenCV-contrib模块源码
  7. CMake

Visual Studio

下载Visual Studio(我本机的是VS2022),通过Visual Studio Installer安装程序,安装C++工具集(或C++工作负荷),详细安装过程可参考这里。

CUDA和cuDNN

下载安装最新版的CUDA Toolkit,注意与本地GPU兼容,或者检查本地路径,看是否已经安装CUDA工具包。以我本机为例,CUDA12.5安装在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.5。同上,登录NVIDIA账号下载cuDNN,并将cuDNN文件中的内容复制到CUDA Toolkit所在目录(如C:\Program Files\NVIDIA\CUDNN\vX.X)的binincludelib/x64等文件夹下,我本机的cuDNN9.2.1版。

Python、NumPy及pip

安装Python3.x版本,由于需要使用numpy矩阵替代cv:Mat,,故还需安装numpy,保证已经安装好numpy(pip install numpy)并确保包括opencv-python和opencv-contrib-python等opencv包卸载干净。

pip uninstall opencv-python

pip uninstall opencv-contrib-python

删除cv2目录——YOUR_PYTHON_PATH/Lib/site-packages/cv2

OpenCV

从github仓库下载,或克隆仓库到本地,内容包括OpenCV及版本匹配的opencv-contrib。

CMake配置

给opencv和opencv-contrib创建build目录,然后配置cmake。Cmake配置可参考官网链接:OpenCV: OpenCV configuration options reference。

这是一个漫长的过程,中途需要下载3rdparty文件夹里引用的第三方内容,个别库还可能出错,需要手工下载。

本例我们把Python也选上:

General configuration for OpenCV 4.10.0 =====================================Version control: unknownPlatform:Timestamp: 2024-07-20T06:31:04ZHost: Windows 10.0.22631 AMD64CMake: 3.29.0CMake generator: Visual Studio 17 2022CMake build tool: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/MSBuild/Current/Bin/amd64/MSBuild.exeMSVC: 1940Configuration: Debug ReleaseCPU/HW features:Baseline: SSE SSE2 SSE3requested: SSE3Dispatched code generation: SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKXrequested: SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKXSSE4_1 (18 files): + SSSE3 SSE4_1SSE4_2 (2 files): + SSSE3 SSE4_1 POPCNT SSE4_2FP16 (1 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVXAVX (9 files): + SSSE3 SSE4_1 POPCNT SSE4_2 AVXAVX2 (38 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2AVX512_SKX (8 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKXC/C++:Built as dynamic libs?: YESC++ standard: 11C++ Compiler: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.40.33807/bin/Hostx64/x64/cl.exe (ver 19.40.33812.0)C++ flags (Release): /DWIN32 /D_WINDOWS /W4 /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP /O2 /Ob2 /DNDEBUGC++ flags (Debug): /DWIN32 /D_WINDOWS /W4 /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP /Zi /Ob0 /Od /RTC1C Compiler: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.40.33807/bin/Hostx64/x64/cl.exeC flags (Release): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /MP /O2 /Ob2 /DNDEBUGC flags (Debug): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /MP /Zi /Ob0 /Od /RTC1Linker flags (Release): /machine:x64 /INCREMENTAL:NOLinker flags (Debug): /machine:x64 /debug /INCREMENTALccache: NOPrecompiled headers: YESExtra dependencies:3rdparty dependencies:OpenCV modules:To be built: calib3d core dnn features2d flann gapi highgui imgcodecs imgproc java ml objdetect photo python3 stitching ts video videoioDisabled: worldDisabled by dependency: -Unavailable: python2Applications: tests perf_tests appsDocumentation: NONon-free algorithms: NOWindows RT support: NOGUI: WIN32UIWin32 UI: YESVTK support: NOMedia I/O:ZLib: build (ver 1.3.1)JPEG: build-libjpeg-turbo (ver 3.0.3-70)SIMD Support Request: YESSIMD Support: NOWEBP: build (ver encoder: 0x020f)PNG: build (ver 1.6.43)SIMD Support Request: YESSIMD Support: YES (Intel SSE)TIFF: build (ver 42 - 4.6.0)JPEG 2000: build (ver 2.5.0)OpenEXR: build (ver 2.3.0)HDR: YESSUNRASTER: YESPXM: YESPFM: YESVideo I/O:DC1394: NOFFMPEG: YES (prebuilt binaries)avcodec: YES (58.134.100)avformat: YES (58.76.100)avutil: YES (56.70.100)swscale: YES (5.9.100)avresample: YES (4.0.0)GStreamer: NODirectShow: YESMedia Foundation: YESDXVA: YESParallel framework: ConcurrencyTrace: YES (with Intel ITT)Other third-party libraries:Intel IPP: 2021.11.0 [2021.11.0]at: D:/Data/source/collection/OpenCV/4100/build/3rdparty/ippicv/ippicv_win/icvIntel IPP IW: sources (2021.11.0)at: D:/Data/source/collection/OpenCV/4100/build/3rdparty/ippicv/ippicv_win/iwLapack: NOEigen: NOCustom HAL: NOProtobuf: build (3.19.1)Flatbuffers: builtin/3rdparty (23.5.9)OpenCL: YES (NVD3D11)Include path: D:/Data/source/collection/OpenCV/4100/opencv-4.10.0/3rdparty/include/opencl/1.2Link libraries: Dynamic loadPython 3:Interpreter: D:/miniconda3/python.exe (ver 3.11.7)Libraries: D:/miniconda3/libs/python311.lib (ver 3.11.7)Limited API: NOnumpy: D:/miniconda3/Lib/site-packages/numpy/core/include (ver 1.26.1)install path: D:/miniconda3/Lib/site-packages/cv2/python-3.11Python (for build): D:/miniconda3/python.exeJava:ant: NOJava: YES (ver 1.8.0.371)JNI: D:/Program Files/jdk-1.8/include D:/Program Files/jdk-1.8/include/win32 D:/Program Files/jdk-1.8/includeJava wrappers: YES (JAVA)Java tests: NOInstall to: D:/Data/source/collection/OpenCV/4100/build/install-----------------------------------------------------------------Configuring done (136.2s)

配置后好再修改以下两个参数,其中CUDA_ARCH_BIN找到CUDA Toolkit后,目前的版本会自动选上。

之前还生成了VTK,故加上了VTK路径(这是VTK的cmake生成路径):

点击“生成”按钮,生成VS工程。

从图可见,Java和Python的绑定工程都有了。

Visual Studio生成

执行ALL_BUILD生成工程,执行INSTALL进行安装。

生成和安装是一个漫长的等待……

注:要直接安装到Python环境中,需要用管理员身份打开VS,然后生成INSTALL项目。

安装效果及应用

#pragma comment(lib, "opencv_core4100.lib")#include <iostream>
#include <opencv2/core/cuda.hpp>int main()
{int deviceCount = cv::cuda::getCudaEnabledDeviceCount();std::cout << "CUDA Device Number: " << deviceCount << std::endl;cv::cuda::printCudaDeviceInfo(0);
}

Python 3.11.7 | packaged by Anaconda, Inc. | (main, Dec 15 2023, 18:05:47) [MSC v.1916 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import cv2>>> print(cv2.__version__)4.10.0>>> print(cv2.cuda.getCudaEnabledDeviceCount())1>>> cv2.cuda.printCudaDeviceInfo(0)*** CUDA Device Query (Runtime API) version (CUDART static linking) ***Device count: 1Device 0: "NVIDIA GeForce RTX 3070 Ti Laptop GPU"CUDA Driver Version / Runtime Version          12.50 / 12.50CUDA Capability Major/Minor version number:    8.6Total amount of global memory:                 8192 MBytes (8589410304 bytes)GPU Clock Speed:                               1.41 GHzMax Texture Dimension Size (x,y,z)             1D=(131072), 2D=(131072,65536), 3D=(16384,16384,16384)Max Layered Texture Size (dim) x layers        1D=(32768) x 2048, 2D=(32768,32768) x 2048Total amount of constant memory:               65536 bytesTotal amount of shared memory per block:       49152 bytesTotal number of registers available per block: 65536Warp size:                                     32Maximum number of threads per block:           1024Maximum sizes of each dimension of a block:    1024 x 1024 x 64Maximum sizes of each dimension of a grid:     2147483647 x 65535 x 65535Maximum memory pitch:                          2147483647 bytesTexture alignment:                             512 bytesConcurrent copy and execution:                 Yes with 1 copy engine(s)Run time limit on kernels:                     YesIntegrated GPU sharing Host Memory:            NoSupport host page-locked memory mapping:       YesConcurrent kernel execution:                   YesAlignment requirement for Surfaces:            YesDevice has ECC support enabled:                NoDevice is using TCC driver mode:               NoDevice supports Unified Addressing (UVA):      YesDevice PCI Bus ID / PCI location ID:           1 / 0Compute Mode:Default (multiple host threads can use ::cudaSetDevice() with device simultaneously)deviceQuery, CUDA Driver = CUDART, CUDA Driver Version  = 12.50, CUDA Runtime Version = 12.50, NumDevs = 1

遇到的几个问题

  1. Visual Studio 已安装的Python版本影响

之前安装VS2022时装了Python开发负荷(Python3.9),导致cmake的时候绑死了该环境,且指向conda里的Python环境,其Libraries还是指向3.9。卸载VS中的Python可以解决。

    2. 缺Nvidia Video Codec SDK导致的警告

CMake Warning at D:/Data/source/collection/OpenCV/4100/opencv_contrib-4.10.0/modules/cudacodec/CMakeLists.txt:26 (message):
cudacodec::VideoReader requires Nvidia Video Codec SDK. Please resolve
dependency or disable WITH_NVCUVID=OFF

CMake Warning at D:/Data/source/collection/OpenCV/4100/opencv_contrib-4.10.0/modules/cudacodec/CMakeLists.txt:30 (message):
cudacodec::VideoWriter requires Nvidia Video Codec SDK. Please resolve
dependency or disable WITH_NVCUVENC=OFF

下载nvidia Video Codec SDK,并把lib和头文件(interface目录)分别复制到cuda toolkit的lib/x64和include目录,问题解决。

    3. CUDA版本问题导致的错误CMake Error at cmake/OpenCVDetectCUDAUtils.cmake :297 (list)  list GET given empty list

因我的Visual Studio是17.10.4,在CUDA12.2上构建,则会出现这个问题,因为根据官方文档,CUDA Toolkit 12.2 只支持到17.0的Visual Studio,如下图:

CUDA Installation Guide Microsoft Windows (nvidia.com)

更换为CUDA 12.5,可以解决这个问题:

https://docs.nvidia.com/cuda/archive/12.5.0/cuda-installation-guide-microsoft-windows/index.html#system-requirements

    5. Python使用CV2时dll缺失错误

ImportError: DLL load failed while importing cv2: 找不到指定的模块。

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "D:\miniconda3\Lib\site-packages\cv2\__init__.py", line 181, in <module>

    bootstrap()

  File "D:\miniconda3\Lib\site-packages\cv2\__init__.py", line 153, in bootstrap

    native_module = importlib.import_module("cv2")

                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "D:\miniconda3\Lib\importlib\__init__.py", line 126, in import_module

    return _bootstrap._gcd_import(name[level:], package, level)

提示dll缺失,使用ProcessMonitor,添加python.exe过滤器,重现错误,追出出错原因:

发现原来是自己编译VTK带来的锅,自己搞的VTK,含着泪也要把它搞定,So,加到cv2的config.py中,但导致别的错误(都怪自己,把VTK的debug版和release版放一起了),单独抽取当中的release版,加入到环境变量或cv2的config.py,或者直接拷贝到site-packages->cv2->python-3.11目录。搞定,问题解决。

参考资料

Quick and Easy OpenCV Python Installation with Cuda GPU in Under 10 Minutes (youtube.com)

GitHub - chrismeunier/OpenCV-CUDA-installation: Saving the process to install OpenCV for Python 3 with CUDA bindings

Unable to enable Cudacodec VideoReader · Issue #11220 · opencv/opencv · GitHub

OpenCV: OpenCV configuration options reference

CUDA Installation Guide for Microsoft Windows (nvidia.com)

windows10+VS2022编译安装opencv-python_重新编译opencv-python-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 智能驾驶(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测,专栏文章质量平均 93 分 最新华为OD机试目录: …

【Golang 面试基础题】每日 5 题(九)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

c/c++的内存管理(超详细)

一、c/c的内存分布 这是操作系统中对于内存的划分&#xff1a; 我们重点掌握以下几个区域即可&#xff1a; 1.栈 (调用函数会建立栈帧) 2.堆(动态开辟的空间) 3.数据段(静态区)&#xff1a;存放静态变量以及全局变量 4.代码段 (常量区) 先来看看一个题目&#xff1a; int…

蓝牙耳机百元之内怎么选?四款百元精品爆款蓝牙耳机盘点

在蓝牙耳机的海洋中&#xff0c;百元价位仿佛是一片神秘的绿洲&#xff0c;既诱人又充满未知&#xff0c;如何在众多选项中挑选出真正的精品呢&#xff1f;蓝牙耳机百元之内怎么选&#xff1f;这是许多消费者的共同疑问&#xff0c;带着这个疑问&#xff0c;作为蓝牙耳机发烧党…

【Python机器学习】朴素贝叶斯——条件概率

条件概率 假设现在有一个装了7块石头的罐子&#xff08;3块灰色&#xff0c;4块黑色&#xff09;&#xff0c;如果从中随机取出一块&#xff0c;灰色的可能性就是3/7&#xff0c;黑色的可能性是4/7。我们使用p(gray)来表示取到灰色石头的概率&#xff0c;其概率值可以通过灰色…

1.3 双向链表定义及部分实现

1.定义 单链表的问题&#xff1a;找后继容易&#xff0c; 找前驱难 双向链表&#xff08; Double Linked List &#xff09; &#xff1a;指的是构成链表的每个结点中设立两个指针域&#xff1a; 一个指向其直接前趋的指针域 prior &#xff0c;一个指向其直接后继的指针域 …

Tent混沌人工蜂群与粒子群混合算法遇到问题,具体问题及解决方案如文。

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

谷歌再被OpenAI截胡?训练数学AI拿下IMO银牌,不及SearchGPT放了空响..

昨夜谷歌振臂高呼&#xff1a;我们新的数学AI&#xff0c;能在IMO数学竞赛达到银牌水平&#xff01; 但就在谷歌发文的几个小时后&#xff0c;OpenAI就偷了谷歌的家&#xff1a; 发布新的搜索方式SearchGPT &#xff0c;剑指挑战谷歌的搜索引擎。 谷歌双模型并用攻克数学难题…

2. 卷积神经网络无法绕开的神——LeNet

卷积神经网络无法绕开的大神——LeNet 1. 基本架构2. LeNet 53. LeNet 5 代码 1. 基本架构 特征抽取模块可学习的分类器模块 2. LeNet 5 LeNet 5: 5 表示的是5个核心层&#xff0c;2个卷积层&#xff0c;3个全连接层.核心权重层&#xff1a;卷积层、全连接层、循环层&#xff…

LCD 横屏切换为竖屏-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

LCD 横屏切换为竖屏 横屏显示如何切换为竖屏显示 LCD 屏默认横屏显示 开发板配套的 LCD 屏默认都是横屏显示&#xff0c;如 4.3 寸、7 寸和 10.1 寸的不同分辨率的 RGB LCD 屏 固定坐标体系 &#xff08;以 800*480 分辨率为例&#xff09;横屏模式下的固定坐标&#xff1a;…

快醒醒,别睡了!...讲《数据分析pandas库》了—/—<5>

一、 1、修改替换变量值 本质上是如何直接指定单元格的问题&#xff0c;只要能准确定位单元地址&#xff0c;就能够做到准确替换。 1.1 对应数值的替换 具体用法如下&#xff1a; replace方法&#xff1a; df.replace(to_replace None :将被替换的原数值&#xff0c;所有…

【Python机器学习】决策树的构造——信息增益

决策树是最经常使用的数据挖掘算法。它之所以如此流行&#xff0c;一个很重要的原因就是不需要了解机器学习的知识&#xff0c;就能搞明白决策树是如何工作的。 决策树的优缺点&#xff1a; 优点&#xff1a;计算复杂度不高&#xff0c;输出结果易于理解&#xff0c;对中间值的…

linux集群架构--高可用--keepalived(13985字详解)

linux架构高可用 a.概述 高可用&#xff1a;HA HighAvailablity —>Keepalived生成VIP&#xff0c;DNS解析到这个IP地址即可 b.原理 keepalived 是基于VRRP协议实现高可用VRRP虚拟路由器冗余协议&#xff0c;最开始是给网络设备实现高可用&#xff0c;目前keepalive实现v…

项目实战1(30小时精通C++和外挂实战)

项目实战1&#xff08;30小时精通C和外挂实战&#xff09; 01-MFC1-图标02-MFC2-按钮、调试、打开网页05-MFC5-checkbox及按钮绑定对象06--文件格式、OD序列号08-暴力破解09-CE10-秒杀僵尸 01-MFC1-图标 这个外挂只针对植物大战僵尸游戏 开发这个外挂&#xff0c;首先要将界面…

GUL图形化界面操作(下部)

目录 ​编辑 前言 Swing 窗口 注意点 新增的组件 进度条组件 开关按钮 多面板和分割面板 多面板 分割面板 ​编辑 选项窗口 对话框带三个选项是&#xff0c;否&#xff0c;取消。 对话框提示输入文本: 前言 修炼中&#xff0c;该篇文章为俺很久前的学习笔记 Swi…

2024钉钉杯A题思路详解

文章目录 一、问题一1.1 问题1.2 模型1.3 目标1.4 思路1.4.1 样本探究1.4.2 数据集特性探究&#xff1a;1.4.3 数据预处理1.4.4 数据趋势可视化1.4.5 ARIMA和LSTM两种预测模型1.4.6 参数调整 二、问题二2.1 问题2.2 模型2.3 目标2.4 思路2.4.1 样本探究2.4.2 数据集特性探究2.4…

Radon(拉当) 变换:超详细讲解(附MATLAB,Python 代码)

Radon 变换 Radon 变换是数学上用于函数或图像的一种积分变换&#xff0c;广泛应用于图像处理领域&#xff0c;尤其是在计算机断层成像 (CT) 中。本文档将详细介绍 Radon 变换的数学含义及其在图像处理中的应用。 数学定义 Radon 变换的数学定义是将二维函数 f ( x , y ) f…

SRTOD

文章目录 AbstractMethodoverviewinnovationsolve Experiment link Abstract 本文主要探讨了在目标检测领域中&#xff0c;如何解决微小物体检测的问题。传统的通用检测器在处理微小物体时性能下降严重&#xff0c;主要是因为难以提取有效的特征。为了解决这个问题&#xff0c…

STL-string(使用和部分模拟实现)

1.string basic_string<char> 是 C 标准库中定义的一个模板类型,用于表示一个字符串。这个模板类接收一个字符类型作为模板参数。typedef basic_string<char> string&#xff1a;string类是basic_string类模板的实例化&#xff0c;它使用 char作为其字符类型。 2.…

狗都能看懂的Actor-Critic强化学习算法讲解

Review Policy Gradient 上面的公式是Policy Gradient的更新函数&#xff0c;这个式子是指在 s t s_t st​时刻采取了 a t a_t at​&#xff0c;计算出对应发生的概率 p θ p_\theta pθ​&#xff0c;然后计算在采取了这个 a t a_t at​之后&#xff0c;所得到的reward有多大。…