opencv python绑定的包装程序包。

opencv-contrib-python的Python项目详细描述


downloads

车轮上的opencv

非官方的为python预先构建的opencv包。

安装和使用

  1. 如果您已经手动安装了以前/其他版本的opencv(例如,python站点包根目录中的cv2模块),请在安装之前将其删除,以避免冲突。

  2. 为您的环境选择正确的软件包:

    有四个不同的软件包,您应该只选择其中一个。不要在同一环境中安装多个不同的软件包。没有插件体系结构:所有包使用相同的命名空间(cv2)。如果您在同一环境中安装了多个不同的软件包,请使用pip uninstall将它们全部卸载,然后只重新安装一个软件包。

    a.标准桌面环境(Windows、MacOS、几乎所有GNU/Linux发行版)的软件包

    • 如果只需要主模块,请运行pip install opencv python
    • 如果需要主模块和contrib模块,请运行pip install opencv contrib python

    b.用于服务器(无头)环境的软件包

    这些包不包含任何gui功能。它们体积较小,适用于更受限制的环境。

    • 如果只需要主模块,请运行pip install opencv python headless
    • 如果需要主模块和contrib模块,请运行pip install opencv contrib python headless(查看opencv documentation中的额外模块列表)
  3. 导入包:

    导入CV2

    所有包都包含haarcascade文件。cv2.data.haarcascades可以用作数据文件夹的快捷方式。例如:

    cv2.cascadescifier(cv2.data.haarcascades+"haarcascade_frontalface_default.xml")

  4. 阅读opencv文档

  5. 在打开新问题之前,请阅读下面的常见问题解答,并查看已打开的其他问题。

常见问题

问:我是否也需要单独安装opencv?

A:不,这些包是特殊的Wheel二进制包,它们已经包含静态构建的opencv二进制文件。

Q:PIP失败,找不到满足要求的版本…

A:很可能这个问题与PIP太旧有关,可以通过运行pip install--upgrade pip来解决。注意,wheel(特别是manylinux)格式目前不支持正确的arm架构,因此pypi中没有针对基于arm的平台的包。但是,opencv python覆盆子pi的包可以从https://www.piwheels.org/中找到。

q:在Windows上导入失败:importorror:dll加载失败:找不到指定的模块。

A:如果在Windows上导入失败,请确保已导入Visual C++可再发行2015已安装。如果您使用的是比Windows 10旧的Windows版本,并且未安装最新的系统更新,Universal C Runtimemi这也是必需的。

windows n和kn版本不包括opencv所需的媒体功能包。如果您使用的是Windows N或Kn版本,请同时安装Windows Media功能包。

如果上述方法无效,请检查您是否正在使用水蟒。旧版本的anaconda有一个导致错误的错误,请参阅此问题的手动修复。

如果在检查完之前的所有解决方案后仍然遇到错误,下载依赖项,然后打开cv2.pyd(通常位于c:\ users\username\appdata\local\programs\pythonxx\lib\site packages\cv2)文件,用它调试缺少的dll问题。

问:我还有其他一些导入错误?

A:确保您已经删除了opencv python绑定的旧手动安装(站点包中的cv2.so或cv2.pyd)。

q:为什么包中不包含非免费算法?

答:这些软件包中不包括sift和surf等非免费算法,因为它们获得了专利,因此不能作为构建的二进制文件分发。有关更多信息,请参见本期:https://github.com/skvark/opencv python/issues/126

q:为什么包和导入不同(opencv python与cv2)?

答:相比于cv2,用户更容易理解opencv python,也更容易通过搜索引擎找到软件包。cv2(旧opencv版本中的旧接口命名为cv)是opencv开发人员在创建绑定生成器时选择的名称。这被保留为导入名称,以便与Internet上的不同类型教程保持一致。对于习惯于import cv2的经验丰富的用户来说,更改导入名称或行为也会让他们感到困惑。

opencv python的文档

Appveyor CI测试状态(Windows)travis ci测试状态(Linux和OS X)

这个存储库的目的是为最常用的python版本和平台提供打包每个新的opencv版本的方法。

构建过程

该项目的结构类似于一个普通的python包,它有一个标准的setup.py文件。构建矩阵中单个条目的构建过程如下(请参见appveyor.yml文件):

  1. 签出存储库和子模块

    • opencv包含在子模块中,并且更新了版本 在新的opencv版本发布后由维护人员手动执行
    • contrib模块也包括在子模块中
  2. 从源代码中查找opencv版本

  3. 安装依赖项(numpy)

  4. 构建opencv

    • 测试被禁用,否则生成时间增加太多
    • 每个生成组合有4个生成矩阵项:有无控制模块,有无gui(无头)
    • Linux版本在ManyLinux Docker容器(CentOS 5)中运行
  5. 将每个.pyd/.so文件复制到此项目的cv2文件夹中,然后 生成轮子

    • 使用auditwheel和delocate检查linux和macos控制盘
  6. 安装生成的车轮

  7. 测试python是否可以导入库并运行一些健全性检查

  8. 使用tween将生成的控制盘上载到pypi(仅在发布版本中)

cv2.pyd/.so文件通常被复制到站点包中。为了避免污染根文件夹,这个包将静态构建的二进制文件包装到cv2包中,包中的文件正确处理导入逻辑。

由于所有包都使用上述相同的cv2名称空间,因此在从opencv python切换到opencv contrib python之前卸载另一个包。

许可

opencv python包(存储库中的脚本)在mit许可下提供。

opencv本身可以在3条bsd许可证下获得。

第三方软件包许可证位于license-3rd-party.txt

所有车轮均配有ffmpeg许可证,许可证位于lgplv2.1

Linux和MacOS Wheels随附qt 4.8.7许可证,许可证位于lgplv2.1

版本控制

find_version.py脚本从opencv源搜索版本信息,并将特定于此存储库的修订号附加到版本字符串中。

发布

当一个新的标记被推送到主分支时,发布并上传到pypi。这些标记区分了包(这个repo可能有修改,但opencv版本保持不变),应该按顺序递增。实际上,发行版本号如下:

cv_major.cv_minor.cv_revision.package_revision例如3.1.0.0

开发构建

将建立对此回购的主分支的每个提交。可能的生成工件使用本地版本标识符:

cvu major.cvu minor.cvu revision+git\u hash这个回购协议e.g.3.1.0+14a8d39

这些工件不能也不会上载到PYPI。

Manylinux车轮

Linux轮子是使用manylinux构建的。这些轮子对于大多数发行版(使用gnu c标准库)来说都是现成的,因为它们是根据glibc的旧版本构建的。

默认的manylinux图像已经用一些opencv依赖项进行了扩展。有关详细信息,请参见docker文件夹。

支持的Python版本

Python2.7是2.x系列中唯一受支持的版本。Python2.7支持将在2019年底取消。

python 3.x版本遵循numpy版本。例如,numpy不再支持python 3.3,因此在opencv python中也不再支持它了。

目前,提供了以下python版本的版本:

    2.7 3.4 3.5 3.6 3.7

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
jstl中循环内部的java方法   java如何以编程方式查找iOS应用程序的堆内存?   java JPA列注释   http Java在Web浏览器中显示HttpResponse的内容   ssl Java如何接受我的自签名证书而不必将其添加到Java信任库   java解析bufferedReader数据,在某些字符处停止   java将具有多个属性的对象映射到另一个对象,然后收集到列表   java是否可以将抽象方法的返回类型设置为与类相同?   java Android导航抽屉,带有菜单图标而非后退按钮   如何在JavaSpringMVC中防止会话重放攻击?   是VB。NET SmtpClient API受限于Java SendMail?   跨多线程/节点的java会话管理   来自Eclipse的java maven项目   使用已解析Java DOM XML中的元素添加新元素