在windows环境下安装支持CUDA的opencv-python

文章目录

  • 附件:GPU和CUDA的关系 —— 开发人员通过CUDA可以使用GPU的计算能力来加速各种计算任务,并提高计算性能和效率。
  • 一、环境配置
    • (0)我的电脑配置环境
    • (1)CUDA + cuDNN下载与安装
    • (2)OpenCV源码下载与环境配置
    • (3)ImportError: DLL load failed while importing cv2: 找不到指定的模块。
    • (4)解决方法:添加DLL路径
  • 二、测试样本:上传图像到GPU + 从GPU下载图像
  • 三、python使用GPU读取视频

附件:GPU和CUDA的关系 —— 开发人员通过CUDA可以使用GPU的计算能力来加速各种计算任务,并提高计算性能和效率。

GPU(图形处理器,Graphics Processing Unit)
是一种专门设计用于图形渲染和并行计算的硬件设备。传统上,GPU 主要用于图形渲染,即将 3D 数据转换为 2D 图像,以显示在计算机屏幕上。然而,由于 GPU 在并行计算方面的强大能力,逐渐引起了开发者的关注,并开始将 GPU 应用于通用目的的并行计算。现代 GPU 具有大量的处理单元(称为 CUDA Core 或 Shader Core),可以同时执行多个并行计算任务,从而在适合并行计算的任务上提供巨大的计算能力。

CUDA(计算统一设备架构,Compute Unified Device Architecture)
是由 NVIDIA 开发的一种用于通用计算的并行计算平台,它提供了一组编程接口和工具,通过 CUDA,开发者可以使用编程语言(如 CUDA C/C++、CUDA Python)编写 GPU 内核函数(称为 CUDA Kernel),并使用 NVIDIA 的 GPU(图形处理器)执行这些内核函数,以加速各种计算任务,包括图形渲染、科学计算、机器学习等。

两者关系:CUDA是一种用于编写并行计算任务的平台和编程模型,而GPU是实际用于执行计算任务的硬件设备。开发人员通过CUDA可以使用GPU的计算能力来加速各种计算任务,并提高计算性能和效率。

一、环境配置

(0)我的电脑配置环境

windows 10
RTX 3090
cuda 11.8.0
python 3.9.16
opencv 4.6.0
# 注意,安装GPU版的openvc之前需要删除原本的opencv 
# 备注:OpenCV官网下载的源码只支持python3.9

(1)CUDA + cuDNN下载与安装

请看博主的这篇文章:https://blog.csdn.net/shinuone/article/details/129054444

(2)OpenCV源码下载与环境配置

OpenCV下载链接Build OpenCV (including Python) with CUDA on Windows,打开后选择找到OpenCV C++ CUDA builds跳转到下载页面,或者直接跳转下载页面OpenCV C++ CUDA builds。

图解教程请看这篇文章
【步骤一】 选择与自己的电脑环境相支持的版本,OpenCV官网下载的源码只支持python3.9。
在这里插入图片描述
【步骤二】 点击opencv_contrib_cuda_4.6.0.20221106_win_amd64.7z,下载并解压缩,得到两个文件夹:install + lib
【步骤三】 添加系统环境变量:电脑 + 属性 + 高级系统设置 + 环境变量 + 系统变量 + Path + 新建 + D:\AI\opencv_contrib_cuda_4.6.0.20221106_win_amd64\install\x64\vc17\bin
【步骤四】 提取源码中的python3\cv2.cp39-win_amd64.pyd并保存到自己的环境中。注意:cp39表示只支持python3.9版本。
(1)复制文件‪D:\AI\opencv_contrib_cuda_4.6.0.20221106_win_amd64\lib\python3\cv2.cp39-win_amd64.pyd
(2)将其保存到Python环境或Anaconda虚拟环境的site-packages中D:\Anaconda\envs\py39\Lib\site-packages\cv2.cp39-win_amd64.pyd
【步骤四】

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

  • 方式一:在cmd中测试是否安装成功

python -c "import cv2; print(f'OpenCV: {cv2.__version__} for python installed and working')"
在这里插入图片描述

  • 方式二:在Pycharm中测试是否安装成功

import cv2
print(f'OpenCV: {cv2.__version__} for python installed and working')
【BUG】将上述代码复制到Pycharm中,系统显示No module named 'cv2'
在这里插入图片描述
且运行结果如下:
在这里插入图片描述

(4)解决方法:添加DLL路径

添加三行代码(需要根据自己的安装环境修改地址)

import os
# 备注:CUDA的安装路径
# 备注:opencv_contrib_cuda的安装路径
# os.add_dll_directory('C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.0\\bin')os.add_dll_directory(r'D:\CUDA\CUDA02\bin')				
os.add_dll_directory(r'D:\AI\opencv_contrib_cuda_4.6.0.20221106_win_amd64\install\x64\vc17\bin')import cv2
print(f'OpenCV: {cv2.__version__} for python installed and working')

在源码中系统仍会显示No module named 'cv2' ,但是可以运行成功且不影响后续使用。
在这里插入图片描述
运行结果如下:
在这里插入图片描述

二、测试样本:上传图像到GPU + 从GPU下载图像

在这里插入图片描述

import os
os.add_dll_directory(r'D:\CUDA\CUDA02\bin')
os.add_dll_directory(r'D:\AI\opencv_contrib_cuda_4.6.0.20221106_win_amd64\install\x64\vc17\bin')import cv2
print(f'OpenCV: {cv2.__version__} for python installed and working')# (1)读取图像
image = cv2.imread('your_template.png')
if image is None:print("无法加载图像1")# (2)GPU设置
# print(cv2.cuda.getCudaEnabledDeviceCount())     # 检查是否有可用的 GPU
cv2.cuda.setDevice(0)                           # 设置使用的 GPU 设备索引,0 表示第一个 GPU
# cv2.cuda.printCudaDeviceInfo(0)                 # 打印 GPU 设备信息# (3)上传与下载
image_gpu = cv2.cuda_GpuMat()                                       # 3.0创建一个空的GPU矩阵
image_gpu.upload(image)                                             # 3.1将图像上传到GPU
screenshot = cv2.cuda.cvtColor(image_gpu, cv2.COLOR_RGB2BGR)        # 3.2图像处理
screenshot = cv2.cuda.resize(screenshot, (400, 400))
result_cpu = screenshot.download()                                  # 3.3从GPU下载处理后的图像到CPU# (4)打印上传与下载前后的图像属性不改变
print("图像宽度: ", image.shape)
print("数据类型:", image.dtype)
print("在CPU下,原始图像格式:", type(image))print()
print("在GPU下,处理后的图像格式:", type(screenshot))
print()print("在CPU下,处理后的图像格式:", type(result_cpu))
print("图像宽度: ", result_cpu.shape)
print("数据类型:", result_cpu.dtype)# (5)显示图像
if result_cpu is None:print("无法加载图像2")
else:cv2.imshow("Window", result_cpu)cv2.waitKey(0)cv2.destroyAllWindows()

三、python使用GPU读取视频

(1)opencv - python使用CUDA处理图像

(2)opencv - python使用CUDA读取视频

(3)opencv - C++使用CUDA的入门教程

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

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

相关文章

NXP i.MX 8M Mini工业核心板硬件说明书(四核ARM Cortex-A53 + 单核ARM Cortex-M4,主频1.6GHz)

1 硬件资源 创龙科技SOM-TLIMX8是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 单核ARM Cortex-M4异构多核处理器设计的高端工业级核心板,ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM Cortex-M4实时处理单元主频高达400MHz。处理器…

【日志加载 log4j】

日志 笔记记录 1. 日志介绍2. 日志体系结构3.Log4j开发流程4.Log4j组成4.1 Loggers 记录器4.2 Appenders 输出源4.3 Layouts 布局5. 配置文件 log4j.properties 1. 日志介绍 2. 日志体系结构 3.Log4j开发流程 1.引入依赖<dependency><groupId>log4j</groupId>…

星辰秘典:解开Python项目的神秘面纱——迷宫之星(迷宫探索与求解)

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;html css js&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;你好&#x…

【视频文稿】车载Android应用开发与分析 - AIDL实践与封装(上)

本期视频地址 &#xff1a; 车载Android应用开发与分析 - AIDL实践与封装&#xff08;上&#xff09;_哔哩哔哩_bilibili 开发手机APP时我们一般都是写一个独立的应用&#xff0c;很少会涉及到除了系统服务以外的多个进程间交互的情况&#xff0c;但开发车载应用则不同&#x…

Kafka 为什么那么快?

有人说&#xff1a;他曾在一台配置较好的机子上对 Kafka 进行性能压测&#xff0c;压测结果是 Kafka 单个节点的极限处理能力接近每秒 2000万 条消息&#xff0c;吞吐量达到每秒 600MB。 那 Kafka 为什么这么快&#xff1f;如何做到这个高的性能&#xff1f; 本篇文章主要从这…

Restful风格笔记

Restful风格知识点 RestController注解 在类上添加RestController可以默认类中的所有方法都带有ResponseBody注解&#xff0c;可以省去一个个添加的麻烦。 RestController RequestMapping("/restful") //CrossOrigin(origins {"http://localhost:8080"…

Java基础——正则表达式

1 概述 正则表达式用于匹配规定格式的字符串。 除了上面的以外&#xff0c;还有一个符号就是括号&#xff0c;括号括起来的表示一个捕获组&#xff0c;一个捕获组可以作为一个重复单位来处理。 2 使用 2.1 判断是否匹配 String自带了一个可以使用正则表达式判断字符串是…

随着人工智能时代的到来,算力需求的成倍增长成为新的趋势

方向一&#xff1a;AI与算力相辅相成 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是新一轮科技革命和产业变革的重要驱动力量。…

Python爬取影评并进行情感分析和数据可视化

Python爬取影评并进行情感分析和数据可视化 文章目录 Python爬取影评并进行情感分析和数据可视化一、引言二、使用requestsBeautifulSoup进行影评的爬取1、分析界面元素2、编写代码 三、情感分析1、数据预处理2、情感分析3、数据可视化 一、引言 前几天出了《航海王&#xff1…

如何优雅地使用Low Code提高开发效率

2023年&#xff0c;低代码热度有&#xff0c;但是在企业内部核心场景的落地比例不高&#xff0c;推进进展也没有想象中快。就算是这样&#xff0c;低代码赛道也在“暗流涌动”。 数字化趋势下&#xff0c;很多企业想要以数字化的手段进行降本增效。很多企业希望以低代码的模式…

Innovus: dbGet 快速学习教程

dbGet是innovus/encounter工具自带的"database access command"命令中的一部分&#xff0c;它几乎可以用来获取设计相关的一切信息。 输入dbGet 按[Tab]键&#xff0c;能看到三个选项&#xff0c;分别是head / top /selected。这三个选项所代表的意义如下: head --…

win10笔记本电脑总是自动休眠解决办法

1、运行regedit&#xff0c;进入注册表编辑器&#xff1b; 2、在打开的注册表编辑器左侧定位到&#xff1a;计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0&…