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 设置隐藏工具栏 opencv怎么打开_python

选择opencv-4.7.0-windows.exe

opencv 设置隐藏工具栏 opencv怎么打开_python_02

下载完成后解压到指定文件夹

opencv 设置隐藏工具栏 opencv怎么打开_python_03

2.2、OpenCV-contrib

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

点击tags(OpenCV-contrib没有release版本)

opencv 设置隐藏工具栏 opencv怎么打开_计算机视觉_04

选择与opencv-4.7.0对应的4.7.0版本

opencv 设置隐藏工具栏 opencv怎么打开_opencv 设置隐藏工具栏_05

下载源码即可

opencv 设置隐藏工具栏 opencv怎么打开_opencv 设置隐藏工具栏_06

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

2.3、Cmake

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

选择3.26.3的安装版即可

opencv 设置隐藏工具栏 opencv怎么打开_计算机视觉_07

傻瓜式安装,无需多言~

2.4 Visual Studio

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

选择你喜欢的版本

opencv 设置隐藏工具栏 opencv怎么打开_windows_08

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

注意:如果当前你使用的是win10,建议勾选Windows 10 SDK,目前vs2022默认包含的是Windows 11 SDK

opencv 设置隐藏工具栏 opencv怎么打开_windows_09

2.5 Anaconda/Miniconda

Anaconda下载网页https://www.anaconda.com/

opencv 设置隐藏工具栏 opencv怎么打开_opencv_10

Miniconda下载网页https://docs.conda.io/en/latest/miniconda.html

opencv 设置隐藏工具栏 opencv怎么打开_计算机视觉_11

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

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

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

conda create -n e_name python=3.X

激活虚拟化境

conda activate e_name

查看pip安装包的位置

python -m site

opencv 设置隐藏工具栏 opencv怎么打开_opencv 设置隐藏工具栏_12

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

查找site.py位置

python -m site -help

opencv 设置隐藏工具栏 opencv怎么打开_python_13

修改位置

USER_SITE = “D:\miniconda3\envs\complied_opencv\Lib\site-packages”

USER_BASE = “D:\miniconda3\envs\complied_opencv\Scripts”

opencv 设置隐藏工具栏 opencv怎么打开_python_14

检测修改结果

python -m site

opencv 设置隐藏工具栏 opencv怎么打开_opencv_15

下载numpy–编译时需要

pip install numpy

3、目录配置

新建编译时需要用到的build文件夹,给他们统一命名方式

opencv 设置隐藏工具栏 opencv怎么打开_opencv 设置隐藏工具栏_16

4、配置Cmake

4.1、选择目录

opencv 设置隐藏工具栏 opencv怎么打开_opencv 设置隐藏工具栏_17

点击Configure

opencv 设置隐藏工具栏 opencv怎么打开_opencv 设置隐藏工具栏_18

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

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

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

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

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

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

opencv 设置隐藏工具栏 opencv怎么打开_windows_19

4.2、配置OpenCV-contrib

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

注意目录填到modules这一层

opencv 设置隐藏工具栏 opencv怎么打开_opencv 设置隐藏工具栏_20

4.3、配置CUDA

搜索CUDA

opencv 设置隐藏工具栏 opencv怎么打开_opencv_21

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

再次点击Configure

opencv 设置隐藏工具栏 opencv怎么打开_windows_22

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

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

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

图上哪俩没勾选的不要勾选!!!

opencv 设置隐藏工具栏 opencv怎么打开_opencv_23

4.4、配置Python

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

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

e_name是虚拟环境的名称

D:/miniconda3/… —> D:/miniconda3//envs/e_name/…

opencv 设置隐藏工具栏 opencv怎么打开_opencv_24

4.5、配置NONFREE(可选)

开启某些有版权的算法

搜索nonfree,勾选OPENCV_ENABLE_NONFREE

opencv 设置隐藏工具栏 opencv怎么打开_windows_25

4.6、处理setupvars(可选)

这个报错可以忽略,不影响编译

opencv 设置隐藏工具栏 opencv怎么打开_python_26

也可以取消勾选OPENCV_GENERATE_SETUPVARS

opencv 设置隐藏工具栏 opencv怎么打开_opencv 设置隐藏工具栏_27

4.7、优化编译(可选)

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

4.8、生成

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

Configure done后,点击Generate

opencv 设置隐藏工具栏 opencv怎么打开_windows_28

Generate done后,点击Open Project

opencv 设置隐藏工具栏 opencv怎么打开_python_29

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

5、VS生成

切记生成方式选择Release

opencv 设置隐藏工具栏 opencv怎么打开_windows_30

5.1、 生成ALL BUILD

opencv 设置隐藏工具栏 opencv怎么打开_计算机视觉_31

完成后输出如下(会因版本、配置不同而有差异)

opencv 设置隐藏工具栏 opencv怎么打开_opencv_32

5.2、生成INSTALL

opencv 设置隐藏工具栏 opencv怎么打开_python_33

完成后输出如下(会因版本、配置不同而有差异)

opencv 设置隐藏工具栏 opencv怎么打开_python_34

6、使用编译版本

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

import cv2
print(cv2.__version__)

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

7、迁移编译版本

编译完成后,需要保留的文件夹,install、lib、bin(可选)、python_loader(可选),其余的都可以删除

opencv 设置隐藏工具栏 opencv怎么打开_计算机视觉_35

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

opencv 设置隐藏工具栏 opencv怎么打开_计算机视觉_36

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

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

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

下面接着说跨设备的迁移

修改config.py

这是改成你保存install文件夹的位置

opencv 设置隐藏工具栏 opencv怎么打开_计算机视觉_37

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

这是改成你保存cv2文件夹的位置

opencv 设置隐藏工具栏 opencv怎么打开_opencv_38

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

7.2、编译了CUDA

步骤和7.1基本一直,在修改config.py多了一个cuda路径

opencv 设置隐藏工具栏 opencv怎么打开_opencv_39

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

一起变强!!!