Windows下编译开启CUDA加速并集成opencv_contrib的OpenCV及在不同Python环境下的应用

OpenCV官网提供的是剔除某些算法、未开启CUDA加速的稳定版本,由于某些原因未集成进标准OpenCV的算法被封装在OpenCV-contrib模块中,想要使用这些算法或开启CUDA加速,就需要自行编译。目前Linux平台C++环境下的编译教程较多,而Windows平台Python环境下编译的教程较少,因此本教程基于Windows环境进行编译部署

1、软件版本

软件版本
OpenCV4.7
OpenCV-contrib4.7
Cmake3.26.3
Visual Studio2022
Anaconda/Miniconda不限

2、资源下载

2.1、OpenCV

打开OpenCV项目的github地址https://github.com/opencv/opencv

选择Releases中的OpenCV4.7.9(实际上你想选择啥版本都可以)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDYzXIfL-1682232359762)(illustration/image-20230420094101377.png)]

选择opencv-4.7.0-windows.exe
在这里插入图片描述

下载完成后解压到指定文件夹
在这里插入图片描述

2.2、OpenCV-contrib

打开OpenCV-contrib项目的github地址https://github.com/opencv/opencv_contrib

点击tags(OpenCV-contrib没有release版本)
在这里插入图片描述

选择与opencv-4.7.0对应的4.7.0版本
在这里插入图片描述

下载源码即可
在这里插入图片描述

下载完成后解压到指定文件夹,建议放在2.1OpenCV解压的同级文件夹

2.3、Cmake

打开Cmake下载网页https://cmake.org/download/

选择3.26.3的安装版即可
在这里插入图片描述

傻瓜式安装,无需多言~

2.4 Visual Studio

打开Visual Studio 下载网页https://visualstudio.microsoft.com/zh-hans/

选择你喜欢的版本
在这里插入图片描述

勾选[使用C++的桌面开发]即可

注意:如果当前你使用的是win10,建议勾选Windows 10 SDK,目前vs2022默认包含的是Windows 11 SDK
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K6Z3HLTY-1682232359772)(illustration/image-20230420100146722.png)]

2.5 Anaconda/Miniconda

Anaconda下载网页https://www.anaconda.com/
在这里插入图片描述

Miniconda下载网页https://docs.conda.io/en/latest/miniconda.html
在这里插入图片描述

选择自己喜欢的版本(哪个版本都可以,因为后期会使用自己创建的虚拟环境而不是base环境的Python编译器)

Anaconda/Miniconda 是为了提供Python环境,也是傻瓜式安装~

创建一个虚拟环境为编译OpenCV做准备,

conda create -n e_name python=3.X

激活虚拟化境

conda activate e_name

查看pip安装包的位置

python -m site

在这里插入图片描述

如果指向虚拟环境目录下的文件夹,就需要更改

查找site.py位置

python -m site -help

在这里插入图片描述

修改位置

USER_SITE = “D:\miniconda3\envs\complied_opencv\Lib\site-packages”
USER_BASE = “D:\miniconda3\envs\complied_opencv\Scripts”
在这里插入图片描述

检测修改结果

python -m site

在这里插入图片描述

下载numpy–编译时需要

pip install numpy

3、目录配置

新建编译时需要用到的build文件夹,给他们统一命名方式
在这里插入图片描述

4、配置Cmake

4.1、选择目录

在这里插入图片描述

点击Configure
在这里插入图片描述

期间会下载一些文件,因为网络原因,可能会不能成功下载,根据下载错误提示的位置,找到下载链接,单独下载并保存在对应的位置.

错误提示在cmake的输出框或者E:\complied_opencv\opencv-build-4.7.0\CMakeDownloadLog.txt

需要注意,名称必须和未正常下载的文件的名称保持一致,因为程序会对文件进行校验

我这里描述的可能有些简单,但是这已经是全部操作了,以后有时间了会考虑把这部分的详细操作步骤记录下来

下载文件保存位置在E:\complied_opencv\opencv-4.7.0\sources.cache

目录结构如下,可能因为版本不同而有差异

在这里插入图片描述

4.2、配置OpenCV-contrib

搜索opencv_extra_modules_path填入E:\complied_opencv\opencv_contrib-4.7.0\modules

注意目录填到modules这一层

在这里插入图片描述

4.3、配置CUDA

搜索CUDA
在这里插入图片描述

勾选和和CUDA相关的所有选项

再次点击Configure

在这里插入图片描述

期间还会有一些文件下载,可能还会因为网路原因导致文件下载失败,处理方法同4,1

操作完成之后再次搜索CUDA,或出现更多的CUDA相关配置

CUDA_FAST_MATH默认是没有勾选的,这里需要给他勾选上

图上哪俩没勾选的不要勾选!!!
在这里插入图片描述

4.4、配置Python

Cmake默认指向的是base环境下的Python,这里需要修改到自己创建的虚拟环境下的Python版本

搜索python,修改路径即可,一般就是在/miniconda3后面添加/envs/e_name/

e_name是虚拟环境的名称

D:/miniconda3/… —> D:/miniconda3//envs/e_name/…
在这里插入图片描述

4.5、配置NONFREE(可选)

开启某些有版权的算法

搜索nonfree,勾选OPENCV_ENABLE_NONFREE
在这里插入图片描述

4.6、处理setupvars(可选)

这个报错可以忽略,不影响编译
在这里插入图片描述

也可以取消勾选OPENCV_GENERATE_SETUPVARS
在这里插入图片描述

4.7、优化编译(可选)

去掉Java、test相关选项,加快编译速度,如果你需要的话,就别取消勾选啦

4.8、生成

上述步骤完成后,再次点击Configure,注意到这里已经点击这玩意好几次啦

Configure done后,点击Generate
在这里插入图片描述

Generate done后,点击Open Project
在这里插入图片描述

至此Cmake的工作完成了,接下来的工作由vs进行

5、VS生成

切记生成方式选择Release

在这里插入图片描述

5.1、 生成ALL BUILD

在这里插入图片描述

完成后输出如下(会因版本、配置不同而有差异)
在这里插入图片描述

5.2、生成INSTALL

在这里插入图片描述

完成后输出如下(会因版本、配置不同而有差异)
在这里插入图片描述

6、使用编译版本

对于camke中配置的python环境,可以直接进行

import cv2
print(cv2.__version__)

# 如果编译了cuda,输出结果将大于0
print(cv2.cuda.getCudaEnabledDeviceCount())

7、迁移编译版本

编译完成后,需要保留的文件夹,install、lib、bin(可选)、python_loader(可选),其余的都可以删除
在这里插入图片描述

bin和python_loader是可以python_loader/setup.py进行部署,不过我不太喜欢这种方式,实际上只保留install和lib就行,甚至lib文件夹也可以不保留。

7.1、未编译CUDA

只需要将install文件夹和cmake中配置的python环境的包路径中的cv2文件夹复制到目标环境对应位置即可。

路径一般都是X:\XXX\envs\opencv\Lib\site-packages\cv2
在这里插入图片描述

cv2文件夹要放在目标环境的包路径下,一般是…\Lib\site-packages\cv2

install文件夹随你喜好,放在哪里都行,为了方便管理,还是建议和cv2放在一起

如果是同一个电脑上的不同环境之间的迁移,到这里就已经完事了。

下面接着说跨设备的迁移

修改config.py

这是改成你保存install文件夹的位置
在这里插入图片描述

修改config-3.8.py(我实在python3.8环境想编译的,同理~)

这是改成你保存cv2文件夹的位置
在这里插入图片描述

然后你可以使用自己编译的opencv了

7.2、编译了CUDA

步骤和7.1基本一直,在修改config.py多了一个cuda路径
在这里插入图片描述

特别提醒,编译CUDA版本opencv时使用的CUDA版本需要与待迁移设备的CUDA版本保持一致,否则将无法正常使用!!!

一起变强!!!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
这个错误是由于编译过程中出现了问题导致的。根据引用\[1\]、\[2\]和\[3\]中的信息,可以看出这些错误是由于编译opencv时出现的问题。具体来说,引用\[1\]和\[2\]中的错误是由于在编译过程中出现了一些文件或目标的错误,而引用\[3\]中的错误是由于在编译python3模块时出现了错误。根据引用\[3\]中提到的解决方案,可以尝试打开cv2.cpp文件并在885行附近添加(char *)来解决问题。然而,对于你提到的最后一个错误,由于缺少相关的引用内容,我无法提供更具体的解决方案。建议你查找相关的错误信息和解决方案,或者向更专业的技术论坛或社区寻求帮助。 #### 引用[.reference_title] - *1* [make[2]: *** [modules/gapi/CMakeFiles/opencv_gapi.dir/build.make:869: modules/gapi/CMakeFiles/opencv](https://blog.csdn.net/AcetylcholineACh/article/details/129970610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [安装opencv3.2.0 cmake出现 CMakeFiles/Makefile2:1264: recipe for target 'modules/cudev/test/...](https://blog.csdn.net/qq_33202928/article/details/80079485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [树莓派安装opencv报错:make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/build.make:56...](https://blog.csdn.net/qq_44357371/article/details/105966714)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半片青柠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值