OpenCV官网提供的是剔除某些算法、未开启CUDA加速的稳定版本,由于某些原因未集成进标准OpenCV的算法被封装在OpenCV-contrib模块中,想要使用这些算法或开启CUDA加速,就需要自行编译。目前Linux平台C++环境下的编译教程较多,而Windows平台Python环境下编译的教程较少,因此本教程基于Windows环境进行编译部署
1、软件版本
软件 | 版本 |
OpenCV | 4.7 |
OpenCV-contrib | 4.7 |
Cmake | 3.26.3 |
Visual Studio | 2022 |
Anaconda/Miniconda | 不限 |
2、资源下载
2.1、OpenCV
打开OpenCV项目的github地址https://github.com/opencv/opencv
选择Releases中的OpenCV4.7.9(实际上你想选择啥版本都可以)
选择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
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版本保持一致,否则将无法正常使用!!!
一起变强!!!