一、设置 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 的步骤:
- 从这个页面下载并安装 32 位 Python 2.7.3。
- 从这个页面下载并安装 NumPy 1.6.2。
- 从这个页面下载并安装 SciPy 11.0。
- 从这个页面下载 OpenCV 2.4.3 的自解压 ZIP。 运行自解压 ZIP,并在出现提示时输入任何目标文件夹,我们将其称为
<unzip_destination>
。 创建一个子文件夹<unzip_destination>\opencv
。 - 将
<unzip_destination>\opencv\build\python\2.7\cv2.pyd
复制到C:\Python2.7\Lib\site-packages
(假设我们将 Python 2.7 安装到默认位置)。 现在,新安装的 Python 可以找到 OpenCV。 - 如果我们希望默认情况下使用新的 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:
- 从下载并安装 CMake 2.8.9 http://www.cmake.org/files/v2.8/cmake-2.8.9-win32-x86.exe 。 运行安装程序时,选择将 CMake 添加到所有用户的系统路径或将 CMake 添加到当前用户的系统路径。
-
下载并安装 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 已安装到默认位置)。重新引导系统。 -
(可选)从这个页面下载并安装 OpenNI 1.5.4.0(32 位)。 另外,对于 64 位 Python,请使用这个页面(64 位) 。
- (可选)从这个页面下载并安装 SensorKinect 0.93(32 位)。 另外,对于 64 位 Python ,请使用这个页面(64 位)。
- 从这个页面下载 OpenCV 2.4.3 的自解压 ZIP。 运行自解压 ZIP,并在出现提示时输入任何目标文件夹,我们将其称为
<unzip_destination>
。 创建一个子文件夹<unzip_destination>\opencv
。 -
打开命令提示符,然后在另一个文件夹中进行构建:
```py
mkdir
```
将目录更改为构建文件夹:
```py
cd
```
-
现在,我们准备配置我们的构建。 要了解所有选项,我们可以阅读
<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。
-
配置好构建系统后,我们就可以进行编译了。
对于 Visual Studio 或 Visual C++ Express,打开
<build_folder>/OpenCV.sln
。 选择Release
配置并构建。 如果出现构建错误,请仔细检查是否已选择Release
配置。或者,对于 MinGW,运行:
```py
mingw32-make.
```
-
将
<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 的一部分。 - 最后, 我们需要确保 Python 和其他进程可以找到其余的 OpenCV。 编辑系统的
Path
变量,并附加;<build_folder>/bin/Release
(对于 Visual Studio 版本)或;<build_folder>/bin
(对于 MinGW 版本)。 重新启动系统。
在 Mac OSX Snow Leopard,Mac OSX Lion 或 Mac OSX 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 开发人员工具:
- 从 Mac App Store 或这个页面下载并安装 Xcode。 在安装过程中,如果可以选择安装命令行工具,请选择它。
- 打开 Xcode 并接受许可协议。
- 如果安装程序没有为我们提供安装命令行工具的选项,则必须执行最后一步。 转到 Xcode | 首选项 | 下载,然后单击命令行工具旁边的安装按钮。 等待安装完成并退出 Xcode。
现在,我们拥有任何方法所需的编译器。
将 MacPorts 与现成的包一起使用
我们可以使用 MacPorts 包管理器来帮助我们设置 Python 2.7,NumPy 和 OpenCV。 MacPorts 提供了终端命令,这些命令可自动执行各种开源软件(OSS)的下载,编译和安装过程。 MacPorts 还根据需要安装依赖项。 对于每个软件,依赖关系和构建秘籍都在称为 Portfile 的配置文件中定义。 MacPorts 存储库是 Portfiles 的集合。
从已经设置了 Xcode 及其命令行工具的系统开始,以下步骤将通过 MacPorts 为我们提供 OpenCV 安装:
- 从这个页面下载并安装 MacPorts。
-
如果我们想要支持 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 知道先在我的在线存储库中搜索端口文件,然后在默认的在线存储库中搜索。
-
打开终端并运行以下命令以更新 MacPorts:
```py $ sudo port selfupdate
```
出现提示时,输入您的密码。
-
现在(如果我们使用的是我的存储库),运行以下命令以安装带有 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
命令添加其他变体。 为了获得更大的灵活性,我们可以编写自己的变体(如下一节所述)。 -
另外,运行以下命令来安装 SciPy:
```py $ sudo port install py27-scipy
```
-
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:
- 在某个地方创建一个文件夹来保存我们的自定义 Portfile。 我们将此文件夹称为
<local_repository>
。 -
编辑文件
/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>
中搜索端口文件,然后在其默认的在线存储库中搜索。 -
打开终端并更新 MacPorts,以确保我们拥有默认存储库中的最新 Portfile:
```py $ sudo port selfupdate
```
-
让我们以默认存储库的
opencv
Portfile 为例进行复制。 我们还应该复制目录结构,该结构确定 MacPorts 如何对包进行分类。py $ mkdir <local_repository>/img/ $ cp /opt/local/var/macports/sources/rsync.macports.org/release/ports/img/opencv <local_repository>/graphics
另外,对于包含 Kinect 支持的示例,我们可以从这个页面下载我的在线存储库,解压缩并将其整个
graphics
文件夹复制到<local_repository>
:py $ cp <unzip_destination>/graphics <local_repository>
-
编辑
<local_repository>/img/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 进行任何编辑后,保存它。
-
现在,我们需要在本地存储库中生成一个索引文件,以便 MacPorts 可以找到新的 Portfile:
```py $ cd
$ portindex ```
-
从现在开始,我们可以像对待其他 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 安装:
-
打开终端并运行以下命令来安装 Homebrew:
```py $ ruby -e "$(curl -fsSkLraw.github.com/mxcl/homebrew/go)"
```
-
与 MacPorts 不同,Homebrew 不会自动将其可执行文件放入
PATH
中。 为此,创建或编辑文件~/.profile
,并在顶部添加以下行:```py export PATH=/usr/local/bin:/usr/local/sbin:$PATH
```
保存文件并运行以下命令以刷新
PATH
:```py $ source ~/.profile
```
请注意,由 Homebrew 安装的可执行文件现在优先于由系统安装的可执行文件。
-
对于 Homebrew 的自我诊断报告,请运行:
```py $ brew doctor
```
遵循其提供的任何故障排除建议。
-
现在,更新 Homebrew:
```py $ brew update
```
-
运行以下命令以安装 Python 2.7:
```py $ brew install python
```
-
现在,我们可以安装 NumPy。 Homebrew 对 Python 库包的选择是有限的,因此我们使用 Homebrew 的 Python 随附的名为
pip
的单独的包管理工具:```py $ pip install numpy
```
-
SciPy 包含一些 Fortran 代码,因此我们需要适当的编译器。 我们可以使用 Homebrew 来安装
gfortran
编译器:```py $ brew install gfortran
```
现在,我们可以安装 SciPy:
```py $ pip install scipy
```
-
要在 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 配置标志,我们需要查看其源代码。 从下载源代码存档 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
。
对 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 及其依赖项:
-
打开终端并运行此命令以更新 Apt:
```py $ sudo apt-get update
```
-
现在,运行以下命令以使用 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 在内的深度摄像机:
- 从这个页面下载我的安装脚本,并将其放置在任何目标位置,例如
<script_folder>
。 -
(可选)编辑脚本以自定义 OpenCV 的构建配置。 要查看与 OpenCV 相关的 CMake 配置标志,我们需要查看其源代码。 从这里下载源代码存档,将其解压缩到任何位置,然后读取
<unzip_destination>/OpenCV-2.4.3/CMakeLists.txt
。对脚本进行任何编辑后,将其保存。
-
打开终端并运行此命令以更新 Apt:
```py $ sudo apt-get update
```
-
将目录更改为
<script_folder>
:```py $ cd
```
设置脚本的权限,使其可执行:
```py $ chmod +x install_opencv_ubuntu.sh
```
执行脚本:
```py $ ./install_opencv_ubuntu.sh
```
出现提示时,输入密码。 提示安装包时,请输入
Y
。 -
安装脚本创建一个文件夹
<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
:显示照片。 按A
,B
,C
,D
或E
查看照片的变化,以及颜色或灰度值的相应直方图。python2/opt_flow.py
(Ubuntu 包中缺少):这将显示一个网络摄像头源,其中叠加了可视化的光流(运动方向)。 例如,在网络摄像头上慢慢挥手以查看效果。 按1
或2
进行可视化显示。
要退出脚本,请按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 文件获得:
- API 参考
- 教程(这些教程使用 C++ 代码。有关教程代码的 Python 端口,参见 Abid RahmanK 资料库。)
- 用户指南(不完整)
如果您在飞机上或无法访问互联网的其他地方编写代码,则肯定要保留文档的脱机副本。
如果文档似乎无法回答您的问题,请尝试与 OpenCV 社区联系。 在一些网站上,您会找到有用的人:
最后,如果您是高级用户,想尝试来自最新(不稳定)的 OpenCV 源代码的新功能,错误修复和示例脚本,请查看项目的存储库。
总结
到现在为止,我们应该已经安装了 OpenCV,该安装可以完成本书中描述的项目所需的一切。 根据我们采用的方法,我们可能还会有一组工具和脚本,可用于重新配置和重建 OpenCV 以满足我们的未来需求。
我们知道在哪里可以找到 OpenCV 的 Python 示例。 这些示例涵盖的功能范围不同于本书的项目,但它们可作为额外的学习辅助工具。