【opencv】windows10下opencv4.8.0-cuda Python版本源码编译教程

【opencv】windows10下opencv4.8.0-cuda Python版本源码编译教程

提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论

文章目录


前言

OpenCV是一个开源的计算机视觉库,包含了核心模块和扩展模块,提供了基础的图像处理和计算机视觉算法,以及一些机器学习工具。而OpenCV Contrib是OpenCV社区贡献的一组扩展模块之一,包含了一些较为新颖和实用的算法和工具函数,提供了一些高级的图像处理和计算机视觉算法。这些功能和算法可能不适合所有用户或者还处于实验性阶段。OpenCV Contrib模块中的代码由社区贡献者开发和维护,它们提供了一些在OpenCV核心库中尚未包含的新特性和实验性功能。


准备工具

cmake、vs2019、opencv4.8.0、opencv_contrib-4.8.0、anaconda、cuda、cudnn

anaconda/cuda/cudnn

安装cuda、cudnn可以参考此前博主的【深度学习windows10环境配置详细教程】,因为对于新手来说,需要注意的细节比较多,这里不浪费篇幅重复讲述了。

anaconda创建环境(选做)

为了将CUDA版本的opencv安装到虚拟环境中,安装到默认环境(base)不需要执行此步骤。

bash 复制代码
# 搭建opencv环境
conda create -n opencv_onnx_gpu python=3.10.9 -y
# 激活环境
activate opencv_onnx_gpu

虚拟环境中需要安装numpy,后续的编译过程中需要。

bash 复制代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

安装原生python(选做)

在使用 CMake 为 Anaconda 新建的虚拟环境安装 OpenCV 时,需要在主机上安装一个与虚拟环境中的 Python 版本一致的原生环境,这是由于CMake 需要在构建过程中使用与虚拟环境中的 Python 版本一致的 Python 解释器来生成适用于该版本的 Python 绑定。

博主在anaconda创建的虚拟环境python为3.10,因此需要安装了python3.10原生版本,否则即使通过编译但始终无法使用opencv-python。

原生python官网下载地址,选择Windows版本。

这里通过激活虚拟环境查看安装对应的版本,博主不确定这种微小版本的差异会不会影响后续编译测试,所以最好都保持一致。

勾选加入系统环境后直接安装。

配置环境变量,这里可能出现cmd使用的python版本还是使用anaconda的base环境的情况,这是因为在环境变量Path中anaconda的顺序排在原生Python的前面,调整原生python的路径在anaconda的base之前即可。

cmake

CMake官方下载地址,下载cmake-3.27.7-windows-x86_64.msi。

添加到环境和安装路径博主根据自身情况作出了修改,其他都是默认安装。

出现以下界面安装成功。

opencv4.8.0

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。下载后直接解压。


CMake编译

  1. 打开CMake,where is the source code是Opencv sources(博主是opencv-4.8.0)的文件夹位置,where to build the binaries是编译opencv保存的文件夹位置(自定义),在左下角第一次点击Configure。
  2. 选择对应vs的版本(博主是vs2019),系统选择x64,最后点右下角Finish,显示Configuring done。
  3. 安装到默认环境(base)不需要执行此步骤,该步骤步骤的目的是安装cuda版本opencv到用户自定义的虚拟环境中,分别将路径指向自定义虚拟环境的对应位置 : PYTHON3_EXECUTABLE、PYTHON3_INCLUDE_DIR、PYTHON3_LIBRARY、PYTHON3_NUMPY_INCLUDE_DIRS(需要安装numpy)、PYTHON3_PACKAGES_PATH。
    4.在Search搜索框搜索带cuda的关键字,全部勾选。
  4. Search搜索框搜索OPENCV_EXTRA_MODULES_PATH,添加解压的opencv_contrib中的modules的路径,再搜索并勾选OPENCV_ENABLE_NONFREE选项。
  5. 将build_opencv_world选上,这可以将所有opencv的库都编译在一起,不需要自己手动选择添加每个小模块,但是具体的工程又不建议这种全家桶。
  6. 对于java、js、tests相关选项的选择,用Search搜索框分别搜索"java","js","tests",根据需要选中和取消相关选项,默认都是选中,博主都取消了,必须勾选BUILD_opencv_python3,决定了能否在python中使用GPU加速,第二次点击Configure。
  7. 显示Configuring done后,将CUDA_ARCH_BIN显卡算力内容改成自己显卡的算力。官网查看显卡算力地址,删除小于自己显卡算力的部分,再搜索并勾选ENABLE_FAST_MATH选项,第三次点击Configure。
  8. 显示Configuring done后,点击generate,显示generating done,成功完成cmake编译,在输出的opencv保存文件夹位置中存在就生成了OpenCV.sln文件。

cmake编译过程是会从githup上下载数据,但是一般都会出现下载失败的情况,这里建议读者先跳到【可能出现的问题】这一小节,来确认是不是自己也出现了下载失败的情况。


VS2019编译

  1. 确保在解决方案的bindings这个目录下有opencv_python3,否则即使编译成功仍然不能使用CUDA加速。
  2. 使用VS2019 (以管理员方式运行) 打开刚刚编译工程OpenCV.sln,在release|x64模式下,在解决方案资源管理器--->CMakeTargets--->右键点击ALL_BUILD-->生成。
  3. 同样在release|x64模式下,在解决方案资源管理器--->CMakeTargets--->右键点击INSTALL-->生成。

没有任何报错信息就是编译完成,在XXX\lib\python3\Release文件夹下可以看到cv2.cpxxx-win_amd64.pyd文件。

XXX是编译opencv保存的文件夹位置(博主是opencv-4.8.0-vs2019-64),cpxx是python版本(博主是cp310)

同时,在虚拟环境中,可以在路径Lib\site-packages下看到cv2文件夹

进入cv2目录打开config.py可以看到虚拟环境opencv_onnx_gpu依赖于cmake编译的opencv(where to build the binaries)。

博主将依赖的opencv拷贝到了虚拟环境中,并修改了依赖的路基。


可能出现的问题

cmake编译过程中可能出现的问题

cmake编译出现Download failed的问题。

在where to build the binaries位置里面有个CMakeDownloadLog.txt,将里面下载链接复制到浏览器进行下载,

将其和where is the source code里面的.cache文件夹里面内容相对应,下图是下载失败时候,文件大小是0KB,手动下载完成后进行替换。

注意用来替换的文件的名称要与对应空文件的名称保持一致。

对于部分文件则需要将网页以另存为的方式进行替换,注意一定不要以复制网页内容粘贴到空文件的方式进行替换,这是无效的的。

将整个.cache都用同样的方式进行处理。

强调一点,出现这种问题,可以暂时先走完CMake编译过程,因为每一次Configuring都会有新的下载内容,然后再一次性将.cache的内容进行完整的替换,最后进行Configuring和Generate。

VS2019编译过程中可能出现的问题

通常是对于部分资源,vs2019没有管理员操作权限,因此只需要用管理员身份重新打开进行操作即可。


测试使用GPU

这里用一段简单的python代码验证安装完成的opencv是否支持gpu设备。

python 复制代码
import cv2
# 检查是否支持CUDA
if cv2.cuda.getCudaEnabledDeviceCount():
    print("检测到支持CUDA的设备数量:", cv2.cuda.getCudaEnabledDeviceCount())
else:
    print("未检测到支持CUDA的设备")

验证成功,oepncv-cuda版本源码编译成功。


总结

尽可能简单、详细的介绍windows10下Python版本opencv4.8.0-cuda版本用源码进行编译的详细流程。

相关推荐
β添砖java10 小时前
深度学习(11)数值稳定+模型初始化、激活函数
人工智能·深度学习
珠海西格电力11 小时前
零碳园区产业园管理系统的全场景源网荷储氢协同调度功能是如何实现的
大数据·运维·人工智能·物联网·能源
smallyoung11 小时前
具有反思能力的 Agentic RAG 实战:用 LangChain4j 实现 CRAG 纠错检索
人工智能·后端
wenzhangli711 小时前
Harness Engineering:AICode 的灵魂——Ooder A2UI 从难产到重生的深度实践
人工智能·ai编程
Deepoch11 小时前
Deepoc 具身模型开发板在田间除草机器人自主作业中的技术应用
人工智能·机器人·具身模型·deepoc·除草机器人
Muyuan199811 小时前
22.让 RAG Agent 更像真实产品:聊天页面优化、PDF 上传、知识库重建与检索片段展示
python·django·pdf·fastapi
ai大模型中转api测评11 小时前
解密 GPT-5.5:原生多模态架构如何重定义 AI 逻辑推理与精准制图
大数据·人工智能·gpt·架构·api
冷雨夜中漫步11 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
xixixi7777711 小时前
英伟达Agent专用全模态模型出击,仿冒AI智能体泛滥成灾,《AI伦理安全指引》即将落地——AI治理迎来“技术-风险-规范”三重奏
人工智能·5g·安全·ai·大模型·英伟达·智能体
程序员-小李11 小时前
uv 学习总结:从零到一掌握现代化 Python 工具链
python·学习·uv