跳转至

一、设置 OpenCV

本章是设置 Python 2.7,OpenCV 和相关库的快速指南。 设置完成后,我们还将查看 OpenCV 的 Python 示例脚本和文档。

涵盖了以下相关库:

  • NumPy:这是 OpenCV 的 Python 绑定的依赖项。 它提供数值计算功能,包括有效的数组。
  • SciPy:这是与 NumPy 密切相关的科学计算库。 OpenCV 不需要它,但是它对于处理 OpenCV 映像中的数据很有用。
  • OpenNI:这是 OpenCV 的可选依赖项。 它增加了对某些深度相机的支持,例如 Asus XtionPRO。
  • SensorKinect:这是一个 OpenNI 插件,是 OpenCV 的可选依赖项。 它增加了对 Microsoft Kinect 深度相机的支持。

出于本书的目的,可以将 OpenNI 和 SensorKinect 视为可选的。 它们在第 5 章“分隔前景/背景区域深度”的整个过程中使用,但在其他各章或附录中未使用。

在撰写本文时,OpenCV 2.4.3 是最新版本。 在某些操作系统上,设置早期版本(2.3.1)更容易。 这些版本之间的差异不应影响我们将在本书中构建的项目。

OpenCV Wiki 中提供了一些其他信息,尤其是有关 OpenCV 的构建选项及其依赖项的信息。 但是,在撰写本文时,Wiki 尚未与 OpenCV 2.4.3 保持同步。

选择和使用正确的设置工具

我们可以自由选择各种设置工具,具体取决于我们的操作系统以及我们要执行的配置数量。 让我们来概述一下 Windows,Mac,Ubuntu 和其他类似 Unix 的系统的工具。

选择 Windows XP,Windows Vista,Windows 7 或 Windows 8

Windows 未预装 Python。 但是,安装向导可用于预编译的 Python,NumPy,SciPy 和 OpenCV。 或者,我们可以从源代码构建。 OpenCV 的构建系统使用 CMake 进行配置,使用 Visual Studio 或 MinGW 进行编译。

如果我们想支持包括 Kinect 在内的深度相机,我们应该首先安装 OpenNI 和 SensorKinect,它们可以作为预编译的二进制文件与安装向导一起使用。 然后,我们必须从源代码构建 OpenCV。


注意

OpenCV 的预编译版本不支持深度相机。


在 Windows 上,OpenCV 对 32 位 Python 的支持比对 64 位 Python 的支持更好。 即使我们是从源代码构建的,我也建议使用 32 位 Python。 幸运的是,32 位 Python 在 Windows 的 32 位或 64 位版本上都能正常工作。


注意

以下某些步骤涉及编辑系统的Path变量。 可以在控制面板环境变量窗口中完成此任务。

在 Windows Vista/Windows 7/Windows 8 上,打开开始菜单,然后启动控制面板。 现在,转到系统和安全性 | 系统 | 高级系统设置。 单击环境变量按钮。

在 Windows XP 上,打开开始菜单,然后转到控制面板 | 系统。 选择高级标签。 单击环境变量按钮。

现在,在系统变量下,选择路径下一步编辑按钮。 按照指示进行更改。 要应用更改,请单击所有 OK 按钮(直到我们回到控制面板的主窗口中)。 然后,注销并重新登录(或者重新启动)。


使用二进制安装程序(不支持深度摄像头)

以下是将设置为 32 位 Python 2.7,NumPy 和 OpenCV 的步骤:

  1. 这个页面下载并安装 32 位 Python 2.7.3。
  2. 这个页面下载并安装 NumPy 1.6.2。
  3. 这个页面
  4. 这个页面下载 OpenCV 2.4.3 的自解压 ZIP。 运行自解压 ZIP,并在出现提示时输入任何目标文件夹,我们将其称为<unzip_destination>。 创建一个子文件夹<unzip_destination>\opencv
  5. <unzip_destination>\opencv\build\python\2.7\cv2.pyd复制到C:\Python2.7\Lib\site-packages(假设我们将 Python 2.7 安装到默认位置)。 现在,新安装的 Python 可以找到 OpenCV。
  6. 如果我们希望默认情况下使用新的 Python 安装运行 Python 脚本,则需要最后一步。 编辑系统的Path变量并附加;C:\Python2.7(假设我们将 Python 2.7 安装到默认位置)。 删除所有以前的 Python 路径,例如;C:\Python2.6。 注销并重新登录(或者重新启动)。

使用 CMake 和编译器

Windows 不附带任何编译器或 CMake。 我们需要安装它们。 如果要支持包括 Kinect 在内的深度相机,还需要安装 OpenNI 和 SensorKinect。

假设我们已经从二进制文件(如前所述)或从源代码安装了 32 位 Python 2.7,NumPy 和 SciPy。 现在,我们可以继续安装编译器和 CMake,可以选择安装 OpenNI 和 SensorKinect,然后从源代码构建 OpenCV:

  1. 这个页面下载并安装 CMake 2.8.9。 运行安装程序时,选择将 CMake 添加到所有用户的系统路径将 CMake 添加到当前用户的系统路径
  2. 下载并安装 Microsoft Visual Studio 2010,Microsoft Visual C++ Express 2010 或 MinGW。 请注意,OpenCV 2.4.3 不能使用较新的版本(Microsoft Visual Studio 2012 和 Microsoft Visual Studio Express 2012)进行编译。

    对于 Microsoft Visual Studio 2010,请使用购买的所有安装媒体。 在安装过程中,包括所有可选的 C++ 组件。 安装完成后重新启动。

    对于 Microsoft Visual C++ Express 2010,请从这个页面获取安装程序。 安装完成后重新启动。

    对于 MinGW,请从这个页面中获取安装程序。 运行安装程序时,请确保目标路径不包含空格,并且包括可选的 C++ 编译器。 编辑系统的Path变量,然后附加;C:\MinGW\bin(假定 MinGW 已安装到默认位置)。重新引导系统。

  3. (可选)从这个页面下载并安装 OpenNI 1.5.4.0(32 位)。 另外,对于 64 位 Python,请使用这个页面(64 位)。

  4. (可选)从这个页面下载并安装 SensorKinect 0.93(32 位)。 另外,对于 64 位 Python ,请使用这个页面(64 位)。
  5. 这个页面下载 OpenCV 2.4.3 的自解压 ZIP。 运行自解压 ZIP,并在出现提示时输入任何目标文件夹,我们将其称为<unzip_destination>。 创建一个子文件夹<unzip_destination>\opencv
  6. 打开命令提示符,然后在另一个文件夹中进行构建:

    ```py

    mkdir

    ```

    将目录更改为构建文件夹:

    ```py

    cd

    ```

  7. 现在,我们准备配置我们的构建。 要了解所有选项,我们可以阅读<unzip_destination>\opencv\CMakeLists.txt中的代码。 但是,出于本书的目的,我们只需要使用将为我们提供带有 Python 绑定的发行版本的选项,以及(可选)通过 OpenNI 和 SensorKinect 支持深度相机的选项即可。

    对于 Visual Studio 2010 或 Visual C++ Express 2010,请运行:

    ```py

    cmake -D:CMAKE_BUILD_TYPE=RELEASE -D:WITH_OPENNI=ON -G "Visual Studio 10" \opencv

    ```

    或者,对于 MinGW,运行:

    ```py

    cmake -D:CMAKE_BUILD_TYPE=RELEASE -D:WITH_OPENNI=ON -G "MinGWMakefiles" \opencv

    ```

    如果未安装 OpenNI,请省略-D:WITH_OPENNI=ON。 (在这种情况下,将不支持深度相机。)如果将 OpenNI 和 SensorKinect 安装在非默认位置,请修改命令以包括-D:OPENNI_LIB_DIR=<openni_install_destination>\Lib -D:OPENNI_INCLUDE_DIR=<openni_install_destination>\Include -D:OPENNI_PRIME_SENSOR_MODULE_BIN_DIR=<sensorkinect_install_destination>\Sensor\Bin

    CMake 可能报告它未能找到某些依赖项。 OpenCV 的许多依赖项是可选的。 因此,不要太在意。 如果构建无法完成或以后遇到问题,请尝试安装缺少的依赖项(通常以预构建的二进制文件形式提供),然后从此步骤重新构建 OpenCV。

  8. 配置好构建系统后,我们就可以进行编译了。

    对于 Visual Studio 或 Visual C++ Express,打开<build_folder>/OpenCV.sln。 选择Release配置并构建。 如果出现构建错误,请仔细检查是否已选择Release配置。

    或者,对于 MinGW,运行:

    ```py

    mingw32-make.

    ```

  9. <build_folder>\lib\Release\cv2.pyd(来自 Visual Studio 版本)或<build_folder>\lib\cv2.pyd(来自 MinGW 版本)复制到C:\Python2.7\Lib\site-packages(假定将 Python 2.7 安装到默认位置)。 现在,Python 安装可以找到 OpenCV 的一部分。

  10. 最后, 我们需要确保 Python 和其他进程可以找到其余的 OpenCV。 编辑系统的Path变量,并附加;<build_folder>/bin/Release(对于 Visual Studio 版本)或;<build_folder>/bin(对于 MinGW 版本)。 重新启动系统。

选择 Mac OS X Snow Leopard,Mac OS X Lion 或 Mac OS X Mountain Lion

Mac 的某些版本预装有 Python 2.7。 但是,Apple 预先定制了预装的 Python,以满足系统的内部需求。 通常,我们不应该在 Apple 的 Python 之上安装任何库。 如果这样做,我们的库可能会在系统更新期间中断,或者更糟的是,可能会与系统所需的预安装库冲突。 相反,我们应该安装标准 Python 2.7,然后在其顶部安装我们的库。

对于 Mac,有几种获取标准 Python 2.7,NumPy,SciPy 和 OpenCV 的可能方法。 所有方法最终都需要使用 Xcode Developer Tools 从源代码编译 OpenCV。 但是,根据方法的不同,第三方工具会以各种方式为我们自动完成此任务。 我们将研究使用 MacPorts 或 Homebrew 的方法。 这些工具可以完成 CMake 可以做的所有事情,此外,它们还可以帮助我们解决依赖关系并将开发库与系统库分离。


提示

我推荐 MacPorts,特别是如果您想通过 OpenNI 和 SensorKinect 编译具有深度摄像头支持的 OpenCV。 相关补丁和构建脚本(包括我维护的补丁)已为 MacPorts 准备就绪。 相比之下,Homebrew 当前不提供使用深度相机支持编译 OpenCV 的现成解决方案。


在继续之前,请确保正确设置 Xcode 开发人员工具:

  1. 从 Mac App Store 或这个页面下载并安装 Xcode。 在安装过程中,如果可以选择安装命令行工具,请选择它。
  2. 打开 Xcode 并接受许可协议。
  3. 如果安装程序没有为我们提供安装命令行工具的选项,则最后一步是必需的。 转到 Xcode | 首选项 | 下载下一步命令行工具旁边的安装按钮。 等待安装完成并退出 Xcode。

现在,我们拥有任何方法所需的编译器。

将 MacPorts 与现成的包一起使用

我们可以使用 MacPorts 包管理器来帮助我们设置 Python 2.7,NumPy 和 OpenCV。 MacPorts 提供了终端命令,这些命令可自动执行各种开源软件OSS)的下载,编译和安装过程。 MacPorts 还根据需要安装依赖项。 对于每个软件,依赖关系和构建秘籍都在称为 Portfile 的配置文件中定义。 MacPorts 存储库是 Portfiles 的集合。

从已经设置了 Xcode 及其命令行工具的系统开始,以下步骤将为我们提供通过 MacPorts 进行的 OpenCV 安装:

  1. 这个页面下载并安装 MacPorts。
  2. 如果我们想要支持 Kinect 深度相机,我们需要告诉 MacPorts 在哪里下载我编写的一些自定义 Portfile。 为此,请编辑/opt/local/etc/macports/sources.conf(假设 MacPorts 已安装到默认位置)。 在rsync://rsync.macports.org/release/ports/ [default]行上方,添加以下行:

    py http://nummist.com/opencv/ports.tar.gz

    保存文件。 现在,MacPorts 知道先在我的在线存储库中搜索端口文件,然后在默认的在线存储库中搜索。

  3. 打开终端并运行以下命令以更新 MacPorts:

    ```py

    $ sudo port selfupdate

    ```

    出现提示时,输入您的密码。

  4. 现在(如果我们使用的是我的存储库),运行以下命令以安装带有 Python 2.7 绑定的 OpenCV 并支持包括 Kinect 在内的深度摄像机:

    ```py

    $ sudo port install opencv +python27 +openni_sensorkinect

    ```

    或者(有或没有我的存储库),运行以下命令以安装具有 Python 2.7 绑定的 OpenCV 并支持除 Kinect 之外的深度相机:

    ```py

    $ sudo port install opencv +python27 +openni

    ```

    依赖关系(包括 Python 2.7,NumPy,OpenNI 和(在第一个示例中)SensorKinect)也会自动安装。

    通过在命令中添加+python27,我们指定我们希望具有 Python 2.7 绑定的opencv变体(构建配置)。 同样,+openni_sensorkinect通过 OpenNI 和 SensorKinect 指定了对深度摄像头的最大支持。 如果您不想使用深度相机,则可以省略+openni_sensorkinect;如果您不想使用与 OpenNI 兼容的深度相机,而不能使用 Kinect,则可以将其替换为+openni。 要在安装之前查看可用变体的完整列表,我们可以输入:

    ```py

    $ port variants opencv

    ```

    根据我们的定制需求,我们可以向install命令添加其他变体。 为了获得更大的灵活性,我们可以编写我们自己的变体(如下一节所述)。

  5. 另外,运行以下命令来安装 SciPy:

    ```py

    $ sudo port install py27-scipy

    ```

  6. Python 安装的可执行文件名为python2.7。 如果我们想将默认的python可执行文件链接到python2.7,我们也要运行:

    ```py

    $ sudo port install python_select $ sudo port select python python27

    ```

将 MacPorts 与您自己的自定义包一起使用

通过一些额外的步骤,我们可以更改 MacPorts 编译 OpenCV 或任何其他软件的方式。 如前所述,MacPorts 的构建秘籍在称为 Portfiles 的配置文件中定义。 通过创建或编辑 Portfile,我们可以访问高度可配置的构建工具(例如 CMake),同时还可以受益于 MacPorts 的功能(例如依赖关系解析)。

假设我们已经安装了 MacPorts。 现在,我们可以配置 MacPorts 以使用我们编写的自定义 Portfile:

  1. 在某个地方创建一个文件夹来保存我们的自定义 Portfile。 我们将此文件夹称为<local_repository>
  2. 编辑文件/opt/local/etc/macports/sources.conf(假设 MacPorts 已安装到默认位置)。 在rsync://rsync.macports.org/release/ports/ [default]行上方,添加以下行:

    py file://<local_repository>

    例如,如果<local_repository>/Users/Joe/Portfiles,则添加:

    py file:///Users/Joe/Portfiles

    注意三斜杠。

    保存文件。 现在,MacPorts 知道先在<local_repository>中搜索端口文件,然后在其默认的在线存储库中搜索。

  3. 打开终端并更新 MacPorts,以确保我们具有默认存储库中的最新 Portfile:

    ```py

    $ sudo port selfupdate

    ```

  4. 让我们以默认存储库的opencv Portfile 为例进行复制。 我们还应该复制目录结构,该结构确定 MacPorts 如何对包进行分类。

    py $ mkdir <local_repository>/graphics/ $ cp /opt/local/var/macports/sources/rsync.macports.org/release/ports/graphics/opencv <local_repository>/graphics

    另外,对于包含 Kinect 支持的示例,我们可以从这个页面下载我的在线存储库,解压缩并将其整个graphics文件夹复制到<local_repository>

    py $ cp <unzip_destination>/graphics <local_repository>

  5. 编辑<local_repository>/graphics/opencv/Portfile。 请注意,此文件指定 CMake 配置标志,依赖关系和变体。 有关端口文件编辑的详细信息,请转到这个页面

    要查看与 OpenCV 相关的 CMake 配置标志,我们需要查看其源代码。 从http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.3/OpenCV-2.4.3.tar.bz2/download下载源代码存档,将其解压缩到任何位置,然后阅读<unzip_destination>/OpenCV-2.4.3/CMakeLists.txt

    对 Portfile 进行任何编辑后,保存它。

  6. 现在,我们需要在本地存储库中生成一个索引文件,以便 MacPorts 可以找到新的 Portfile:

    ```py

    $ cd $ portindex

    ```

  7. 从现在开始,我们可以像对待其他 MacPorts 包一样对待自定义opencv。 例如,我们可以按以下方式安装它:

    ```py

    $ sudo port install opencv +python27 +openni_sensorkinect

    ```

    注意,本地存储库的 Portfile 优先于默认存储库的 Portfile,这是因为/opt/local/etc/macports/sources.conf中列出的顺序。

将 Homebrew 与现成的包一起使用(不支持深度相机)

Homebrew 是另一个可以帮助我们的包管理器。 通常,MacPorts 和 Homebrew 不应安装在同一台计算机上。

从已经安装了 Xcode 及其命令行工具的系统开始,以下步骤将通过 Homebrew 为我们提供 OpenCV 安装:

  1. 打开终端并运行以下命令来安装 Homebrew:

    ```py

    $ ruby -e "$(curl -fsSkLraw.github.com/mxcl/homebrew/go)"

    ```

  2. 与 MacPorts 不同,Homebrew 不会自动将其可执行文件放入PATH中。 为此,创建或编辑文件~/.profile,并在顶部添加以下行:

    ```py

    export PATH=/usr/local/bin:/usr/local/sbin:$PATH

    ```

    保存文件并运行以下命令以刷新PATH

    ```py

    $ source ~/.profile

    ```

    请注意,由 Homebrew 安装的可执行文件现在优先于由系统安装的可执行文件。

  3. 对于 Homebrew 的自我诊断报告,请运行:

    ```py

    $ brew doctor

    ```

    遵循其提供的任何故障排除建议。

  4. 现在,更新 Homebrew:

    ```py

    $ brew update

    ```

  5. 运行以下命令以安装 Python 2.7:

    ```py

    $ brew install python

    ```

  6. 现在,我们可以安装 NumPy。 Homebrew 对 Python 库包的选择是有限的,因此我们使用 Homebrew 的 Python 随附的名为 PIP 的单独的包管理工具:

    ```py

    $ pip install numpy

    ```

  7. SciPy 包含一些 Fortran 代码,因此我们需要适当的编译器。 我们可以使用 Homebrew 来安装 gfortran 编译器:

    ```py

    $ brew install gfortran

    ```

    现在,我们可以安装 SciPy:

    ```py

    $ pip install scipy

    ```

  8. 要在 64 位系统上安装 OpenCV(自 2006 年底以来,所有 Mac 新硬件),请运行:

    ```py

    $ brew install opencv

    ```

    或者,要在 32 位系统上安装 OpenCV,请运行:

    ```py

    $ brew install opencv --build32

    ```


提示

下载示例代码

您可以通过http://www.packtpub.com下载从帐户购买的所有 Packt 图书的示例代码文件。 如果您在其他地方购买了此书,则可以访问http://www.packtpub.com/support并注册以将文件直接通过电子邮件发送给您。


将 Homebrew 与您自己的自定义包一起使用

Homebrew 使编辑现有包定义变得容易:


$ brew edit opencv

包定义实际上是 Ruby 编程语言中的脚本。 可在 Homebrew Wiki 中找到有关编辑它们的提示。 脚本可以指定 Make 或 CMake 配置标志等。

要查看与 OpenCV 相关的 CMake 配置标志,我们需要查看其源代码。 从这个页面下载源代码存档,将其解压缩到任何位置,然后阅读<unzip_destination>/OpenCV-2.4.3/CMakeLists.txt

对 Ruby 脚本进行任何编辑后,保存它。

定制包装可以视为正常包装。 例如,可以按以下方式安装:


$ brew install opencv

选择 Ubuntu 12.04 LTS 或 Ubuntu 12.10

Ubuntu 预先安装了 Python 2.7。 标准的 Ubuntu 存储库包含不支持深度摄像头的 OpenCV 2.3.1 包。 另外,可以使用 CMake 和 GCC 从源代码构建 OpenCV 2.4.3。 从源代码构建时,OpenCV 可以通过 OpenNI 和 SensorKinect 支持深度相机,这些相机可以作为预编译的二进制文件与安装脚本一起使用。

使用 Ubuntu 存储库(不支持深度相机)

我们可以使用 Apt 包管理器安装 OpenCV 2.3.1 及其依赖项:

  1. 打开终端并运行此命令以更新 Apt:

    ```py

    $ sudo apt-get update

    ```

  2. 现在,运行以下命令以使用 Python 绑定安装 NumPy,SciPy 和 OpenCV:

    ```py

    $ sudo apt-get install python-numpy $ sudo apt-get install python-scipy $ sudo apt-get install libopencv-* $ sudo apt-get install python-opencv

    ```

    出现有关包安装的提示时,输入Y

同样,我们可以使用 Ubuntu 软件中心,它是 Apt 的图形前端。

通过可自定义的现成脚本使用 CMake

Ubuntu 预先安装了 GCC 编译器。 但是,我们需要安装 CMake 构建系统。 我们还需要安装或重新安装其他各种库,其中一些库需要进行特殊配置以与 OpenCV 兼容。 因为依赖关系很复杂,所以我编写了一个脚本来下载,配置和构建 OpenCV 及其相关库,以便最终的 OpenCV 安装支持包括 Kinect 在内的深度摄像机:

  1. 这个页面下载我的安装脚本,并将其放在任何位置,例如<script_folder>
  2. (可选)编辑脚本以自定义 OpenCV 的构建配置。 若要查看与 OpenCV 相关的 CMake 配置标志,我们需要查看其源代码。 从这个页面下载源代码存档,将其解压缩到任何位置,然后读取<unzip_destination>/OpenCV-2.4.3/CMakeLists.txt

    对脚本进行任何编辑后,将其保存。

  3. 打开终端并运行此命令以更新 Apt:

    ```py

    $ sudo apt-get update

    ```

  4. 将目录更改为<script_folder>:

    ```py

    $ cd

    ```

    设置脚本的权限,使其可执行:

    ```py

    $ chmod +x install_opencv_ubuntu.sh

    ```

    执行脚本:

    ```py

    $ ./install_opencv_ubuntu.sh

    ```

    出现提示时,输入密码。 出现有关包安装的提示时,输入Y

  5. 安装脚本创建一个文件夹<script_folder>/opencv,其中包含该脚本临时使用的下载和构建文件。 安装脚本终止后,可以安全地删除<script_folder>/opencv。 不过,首先,您可能想在<script_folder>/opencv/samples/python<script_folder>/opencv/samples/python2中查看 OpenCV 的 Python 示例。

选择其他类似 Unix 的系统

用于 Ubuntu 的方法(如前所述)可能适用于从 Ubuntu 12.04 LTS 或 Ubuntu 12.10 派生的任何 Linux 发行版,例如:

  • Kubuntu 12.04 LTS 或 Kubuntu 12.10
  • Xubuntu 12.04 LTS 或 Xubuntu 12.10
  • Linux Mint 13 或 Linux Mint 14

在 Debian Linux 及其衍生版本上,Apt 包管理器的工作方式与在 Ubuntu 上相同,尽管可用包可能有所不同。

在 Gentoo Linux 及其衍生版本上,Portage 包管理器类似于 MacPorts(如前所述),尽管可用包可能有所不同。

在其他类似 Unix 的系统上,包管理器和可用包可能会有所不同。 请查阅包管理员的文档,并搜索名称中带有opencv的任何包。 请记住,OpenCV 及其 Python 绑定可能会分为多个包。

另外,查找由系统提供商,存储库维护者或社区发布的所有安装说明。 由于 OpenCV 使用摄像机驱动程序和媒体编解码器,因此在多媒体支持较差的系统上,使其所有功能正常工作可能会很棘手。 在某些情况下,可能需要重新配置或重新安装系统包才能兼容。

如果包可用于 OpenCV,请检查其版本号。 为了本书的目的,建议使用 OpenCV 2.3.1 或更高版本。 还要检查包是否提供 Python 绑定,以及它们是否通过 OpenNI 和 SensorKinect 提供深度相机支持。 最后,检查开发人员社区中是否有人报告使用包的成功或失败。

相反,如果我们想从源代码中进行 OpenCV 的自定义构建,则参考 Ubuntu 的安装脚本(先前已讨论过)并将其调整为适用于另一个系统上的包管理器和包可能会有帮助。

运行示例

运行一些示例脚本是测试 OpenCV 正确设置的好方法。 这些示例包含在 OpenCV 的源代码存档中。

在 Windows 上,我们应该已经下载并解压缩了 OpenCV 的自解压 ZIP。 在<unzip_destination>/opencv/samples中找到样本。

在包括 Mac 在内的类似 Unix 的系统上,请从这个页面下载源代码归档文件并将其解压缩到任何位置(如果我们尚未这样做的话)。 在<unzip_destination>/OpenCV-2.4.3/samples中找到样本。

一些示例脚本需要命令行参数。 但是,以下脚本(以及其他脚本)应该在没有任何参数的情况下运行:

  • python/camera.py:这将显示网络摄像头供稿(假设已插入网络摄像头)。
  • python/drawing.py:绘制一系列形状,如屏幕保护程序。
  • python2/hist.py:显示照片。 按ABCDE查看照片的变化,以及颜色或灰度值的相应直方图。
  • python2/opt_flow.py(Ubuntu 包中缺少):这将显示一个网络摄像头源,其中叠加了可视化的光流(运动方向)。 例如,在网络摄像头上慢慢挥手以查看效果。 按12进行可视化显示。

要退出脚本,请按Esc(不是窗口的关闭按钮)。

如果遇到消息ImportError: No module named cv2.cv,那么我们正在从不了解 OpenCV 的 Python 安装中运行脚本。 有两种可能的解释:

  • OpenCV 安装中的某些步骤可能失败或错过。 返回并查看步骤。
  • 如果在计算机上安装了多个 Python,则可能是使用了错误的 Python 启动脚本。 例如,在 Mac 上,可能是为 MacPorts Python 安装了 OpenCV,但我们正在使用系统的 Python 运行脚本。 返回并查看有关编辑系统路径的安装步骤。 另外,尝试使用以下命令从命令行手动启动脚本:

    ```py

    $ python python/camera.py

    ```

    您还可以使用以下命令:

    ```py

    $ python2.7 python/camera.py

    ```

    作为选择其他 Python 安装的另一种可能的方法,请尝试编辑示例脚本以删除#!行。 这些行可能会将脚本与错误的 Python 安装(对于我们的特定设置)明确关联。

查找文档,帮助和更新

OpenCV 的文档在线发布在这个页面上。 该文档包含有关 OpenCV 的新 C++ API,其新的 Python API(基于 C++ API),其旧的 C API 和其旧的 Python API(基于 C API)的组合 API 参考。 查找类或函数时,请确保阅读有关新 Python API(cv2模块)而不是旧 Python API(cv模块)的部分。


注意

标题为 OpenCV 2.1 Python 参考的文档可能会显示在 Google 搜索OpenCV Python API的文档中。 避免使用此文档,因为它已过时并且仅涵盖旧的(类似于 C 的)Python API。


该文档也可以作为几个可下载的 PDF 文件获得:

如果您在飞机上或无法访问互联网的其他地方编写代码,则肯定要保留文档的脱机副本。

如果文档似乎无法回答您的问题,请尝试与 OpenCV 社区联系。 在一些网站上,您会找到有用的人:

最后,如果您是高级用户,想尝试使用来自最新(不稳定)的 OpenCV 源代码的新功能,错误修复和示例脚本,请查看项目的存储库

总结

到现在为止,我们应该已经安装了 OpenCV,该安装可以完成本书中描述的项目所需的一切。 根据我们采用的方法,我们可能还会有一组工具和脚本,可用于重新配置和重建 OpenCV,以满足我们未来的需求。

我们知道在哪里可以找到 OpenCV 的 Python 示例。 这些示例涵盖的功能范围不同于本书的项目,但它们可作为额外的学习辅助工具。



回到顶部