OpenCV 正在筹集资金,以使图书馆免费向所有人开放,我们需要整个社区的支持才能做到这一点。在 Github 上向 OpenCV 捐款以表达您的支持。
适用于 Python 的预构建的仅限 CPU 的 OpenCV 包。
如果您希望从源代码编译绑定以启用其他模块(例如 CUDA),请检查手动构建部分。
如果您安装了先前/其他手动安装(= 未通过pip
安装)版本的 OpenCV(例如 Python 站点包根目录中的 cv2 模块),请在安装前将其删除以避免冲突。
确保您的pip
版本是最新的(19.3 是支持的最低版本): pip install --upgrade pip
。使用pip -V
检查版本。例如,Linux 发行版通常附带非常旧的pip
版本,这会导致许多意想不到的问题,特别是对于manylinux
格式。
选择适合您环境的正确包:
有四种不同的软件包(请参阅下面的选项 1、2、3 和 4),您应该仅选择其中一个。不要在同一环境中安装多个不同的软件包。没有插件架构:所有包都使用相同的命名空间( cv2
)。如果您在同一环境中安装了多个不同的软件包,请使用pip uninstall
将它们全部卸载,然后仅重新安装一个软件包。
一个。适用于标准桌面环境(Windows、macOS、几乎所有 GNU/Linux 发行版)的软件包
pip install opencv-python
pip install opencv-contrib-python
(检查 OpenCV 文档中列出的 contrib/extra 模块)b.适用于服务器(无头)环境(例如 Docker、云环境等)的软件包,无 GUI 库依赖项
这些包比上面的其他两个包小,因为它们不包含任何 GUI 功能(不与 Qt/其他 GUI 组件一起编译)。这意味着这些包避免了对 X11 库的严重依赖链,因此您将获得更小的 Docker 映像。如果您不使用cv2.imshow
等,则应始终使用这些软件包。或者您正在使用 OpenCV 之外的其他软件包(例如 PyQt)来创建 GUI。
pip install opencv-python-headless
pip install opencv-contrib-python-headless
(检查 OpenCV 文档中列出的 contrib/extra 模块)导入包:
import cv2
所有包都包含 Haar 级联文件。 cv2.data.haarcascades
可以用作数据文件夹的快捷方式。例如:
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
阅读 OpenCV 文档
在打开新问题之前,请阅读下面的常见问题解答并查看其他已打开的问题。
问:我还需要单独安装 OpenCV 吗?
答:不,这些软件包是特殊的 Wheel 二进制软件包,它们已经包含静态构建的 OpenCV 二进制文件。
问:Pip 安装失败并出现ModuleNotFoundError: No module named 'skbuild'
?
自opencv-python
版本 4.3.0.* 起, manylinux1
轮子被manylinux2014
轮子取代。如果你的 pip 太旧,它会尝试使用 4.3.0.38 中引入的新源发行版来手动构建 OpenCV,因为它不知道如何安装manylinux2014
轮子。但是,由于pip
太旧,源构建也会失败,因为它不理解pyproject.toml
中的构建依赖项。要使用新的manylinux2014
预构建轮子(或从源代码构建),您的pip
版本必须 >= 19.3。请使用pip install --upgrade pip
pip
pip 。
问:在 Windows 上导入失败: ImportError: DLL load failed: The specified module could not be found.
?
答:如果在 Windows 上导入失败,请确保安装了 Visual C++ Redistributable 2015。如果您使用的 Windows 版本早于 Windows 10 并且未安装最新的系统更新,则可能还需要通用 C 运行时。
Windows N 和 KN 版本不包含 OpenCV 所需的媒体功能包。如果您使用的是 Windows N 或 KN 版本,请同时安装 Windows Media 功能包。
如果您使用的是 Windows Server 2012+,媒体 DLL 也可能丢失;请在服务器管理器中安装名为“Media Foundation”的功能。请注意,有些帖子建议安装“Windows Server Essentials Media Pack”,但这需要“Windows Server Essentials Experience”角色,并且该角色将深刻影响您的 Windows Server 配置(通过强制执行 Active Directory 集成等);所以只安装“媒体基础”应该是一个更安全的选择。
如果上述方法没有帮助,请检查您是否使用 Anaconda。旧的 Anaconda 版本存在导致该错误的错误,请参阅此问题以进行手动修复。
如果检查完前面的所有解决方案后仍然遇到错误,请下载 Dependencies 并打开cv2.pyd
(通常位于C:UsersusernameAppDataLocalProgramsPythonPythonXXLibsite-packagescv2
)文件,用它来调试丢失的 DLL 问题。
问:我还有其他导入错误吗?
答:确保您已删除旧的手动安装的 OpenCV Python 绑定(站点包中的 cv2.so 或 cv2.pyd)。
问:函数 foo() 或方法 bar() 返回错误结果、抛出异常或导致解释器崩溃。我应该怎么办?
答:存储库仅包含 OpenCV-Python 包构建脚本,而不包含 OpenCV 本身。 OpenCV 的 Python 绑定是在官方 OpenCV 存储库中开发的,它是报告问题的最佳位置。另外,请在提交新错误之前检查 OpenCV wiki 和官方 OpenCV 论坛。
问:为什么软件包不包含非免费算法?
答:SURF 等非自由算法不包含在这些软件包中,因为它们是专利/非自由的,因此不能作为构建的二进制文件分发。请注意,自 OpenCV 版本 4.3.0 和 3.4.10 起,由于专利到期,SIFT 包含在构建中。请参阅此问题以获取更多信息:#126
问:为什么打包和导入不同(opencv-python 与 cv2)?
A: opencv-python
比cv2
更容易让用户理解,也更容易用搜索引擎找到包。 cv2
(旧 OpenCV 版本中的旧接口被命名为cv
)是 OpenCV 开发人员在创建绑定生成器时选择的名称。将此保留为导入名称,以便与互联网上不同类型的教程保持一致。更改导入名称或行为也会让习惯import cv2
有经验的用户感到困惑。
该存储库的目的是提供为最常用的 Python 版本和平台打包每个新 OpenCV 版本的方法。
该项目的结构类似于带有标准setup.py
文件的普通 Python 包。构建矩阵中单个条目的构建过程如下(例如,请参阅.github/workflows/build_wheels_linux.yml
文件):
在 Linux 和 MacOS 构建中:获取我们编译的 OpenCV 可选 C 依赖项
检查存储库和子模块
从源码中查找 OpenCV 版本
构建 OpenCV
重新排列 OpenCV 的构建结果,添加我们的自定义文件并生成轮子
Linux和macOS的wheel分别用auditwheel和delocate改造,对应
安装生成的轮子
测试 Python 是否可以导入库并运行一些健全性检查
使用 twine 将生成的轮子上传到 PyPI(仅在发布版本中)
步骤 1--4 由pip wheel
处理。
可以使用环境变量自定义构建。除了 OpenCV 的构建接受的任何变量之外,我们还认识到:
CI_BUILD
。设置为1
以模拟 CI 环境构建行为。仅在 CI 构建中使用,以在setup.py
中强制启用某些构建标志。除非您知道自己在做什么,否则请勿使用此功能。ENABLE_CONTRIB
和ENABLE_HEADLESS
。设置为1
以构建 contrib 和/或无头版本ENABLE_JAVA
,设置为1
以启用 Java 客户端构建。默认情况下禁用此功能。CMAKE_ARGS
。 OpenCV 的 CMake 调用的附加参数。您可以使用它来进行自定义构建。有关 CI 环境之外手动构建的更多信息,请参阅下一节。
如果预构建的轮子中未启用某些依赖项,您还可以在本地运行构建来创建自定义轮子。
git clone --recursive https://github.com/opencv/opencv-python.git
cd opencv-python
git
在opencv
和opencv_contrib
子模块中查看 OpenCV 的其他版本export CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"
(在 Windows 中,您需要根据命令行或 PowerShell 设置不同的环境变量)ENABLE_CONTRIB
和ENABLE_HEADLESS
构建的包风格:如果您希望构建opencv-contrib-python
则export ENABLE_CONTRIB=1
pip wheel . --verbose
。注意:确保您拥有最新的pip
版本, pip wheel
命令替换了旧的python setup.py bdist_wheel
命令,该命令不支持pyproject.toml
。setup.py
文件,wheel 包将放置在dist
文件夹中。包裹已准备好,您可以随心所欲地使用它。manylinux
映像作为构建主机,并在构建后运行auditwheel
delocate
(与auditwheel
相同,但适用于 macOS)以获得更好的可移植性为了在未优化的调试版本中构建opencv-python
,您需要稍微避开正常过程。
scikit-build
和numpy
包。python setup.py bdist_wheel --build-type=Debug
。pip install dist/wheelname.whl
将生成的 Wheel 文件安装在dist/
文件夹中。如果您希望构建生成所有编译器命令,则以下标志和环境变量的组合已经过测试,可以在 Linux 上运行:
export CMAKE_ARGS='-DCMAKE_VERBOSE_MAKEFILE=ON'
export VERBOSE=1
python3 setup.py bdist_wheel --build-type=Debug
有关更多讨论,请参阅此问题:#424
从 OpenCV 4.3.0 版开始,PyPI 中也提供了源代码发行版。这意味着,如果您的系统与 PyPI 中的任何轮子不兼容, pip
将尝试从源代码构建 OpenCV。如果您需要 PyPI 中未提供的 OpenCV 版本作为源发行版,请遵循上面的手动构建指南,而不是遵循此指南。
您还可以强制pip
从源发行版构建轮子。一些例子:
pip install --no-binary opencv-python opencv-python
pip install --no-binary :all: opencv-python
如果您需要 contrib 模块或无头版本,只需更改包名称(不需要上一节中的步骤 4)。但是,可以通过环境变量提供任何其他 CMake 标志,如手动构建部分的步骤 3 中所述。如果未提供任何依赖项,OpenCV 的 CMake 脚本将尝试查找并启用任何合适的依赖项。无头发行版具有硬编码的 CMake 标志,可禁用所有可能的 GUI 依赖项。
在 Raspberry Pi 等慢速系统上,完整构建可能需要几个小时。在 8 核 Ryzen 7 3700X 上,构建大约需要 6 分钟。
Opencv-python 包(此存储库中的脚本)可在 MIT 许可证下使用。
OpenCV 本身可在 Apache 2 许可证下使用。
第三方软件包许可证位于 LICENSE-3RD-PARTY.txt。
所有轮子均附带根据 LGPLv2.1 许可的 FFmpeg。
非无头 Linux 轮子附带了根据 LGPLv3 许可的 Qt 5。
这些软件包还包括其他二进制文件。完整的许可证列表可以在 LICENSE-3RD-PARTY.txt 中找到。
find_version.py
脚本从 OpenCV 源中搜索版本信息,并将特定于此存储库的修订号附加到版本字符串。除了一些其他标志之外,它将版本信息保存到cv2
下的version.py
文件中。
当新标签推送到 master 分支时,就会发布版本并上传到 PyPI。这些标签区分包(此存储库可能有修改,但 OpenCV 版本保持不变)并且应按顺序递增。实际上,发布版本号如下所示:
cv_major.cv_minor.cv_revision.package_revision
例如3.1.0.0
master 分支遵循 OpenCV master 分支版本。 3.4 分支遵循 OpenCV 3.4 错误修复版本。
对此存储库的主分支的每次提交都将被构建。可能的构建工件使用本地版本标识符:
cv_major.cv_minor.cv_revision+git_hash_of_this_repo
例如3.1.0+14a8d39
这些工件不能也不会上传到 PyPI。
Linux 轮子是使用 Manylinux2014 构建的。这些轮子对于大多数发行版(使用 GNU C 标准库)来说应该是开箱即用的,因为它们是针对旧版本的 glibc 构建的。
默认的manylinux2014
映像已使用一些 OpenCV 依赖项进行了扩展。有关详细信息,请参阅 Docker 文件夹。
为官方支持的 Python 版本(不在 EOL 中)提供了与 Python 3.x 兼容的预构建轮:
从 4.2.0 和 3.4.9 构建开始,macOS Travis 构建环境已更新至 XCode 9.4。这一更改实际上放弃了对 10.13 之前的 macOS 版本的支持。
从 4.3.0 和 3.4.10 开始构建,Linux 构建环境从manylinux1
更新为manylinux2014
。这放弃了对旧 Linux 发行版的支持。
从版本 4.7.0 开始,Mac OS GitHub Actions 构建环境已更新到版本 11。Mac OS 10.x 支持已取消。请参阅 actions/runner-images#5583
从版本 4.9.0 开始,Mac OS GitHub Actions 构建环境已更新到版本 12。Brew 和大多数使用的软件包不再支持 Mac OS 10.x。