一、设置 OpenCV
您已经读了这本书,因此您可能已经对 OpenCV 是什么有了个概念。 也许您听说过似乎来自科幻小说的功能,例如训练人工智能模型以识别通过相机看到的任何东西。 如果这是您的兴趣,您将不会感到失望! OpenCV 代表开源计算机视觉。 它是一个免费的计算机视觉库,可让您处理图像和视频以完成各种任务,从显示网络摄像头中的帧到教机器人识别现实中的物体。
在本书中,您将学习利用 Python 编程语言来利用 OpenCV 的巨大潜力。 Python 是一种优雅的语言,具有相对较浅的学习曲线和非常强大的功能。 本章是设置 Python 3,OpenCV 4 和其他依赖项的快速指南。 作为 OpenCV 的一部分,我们将设置opencv_contrib
模块,这些模块提供由 OpenCV 社区而不是核心开发团队维护的其他功能。 设置完成后,我们还将查看 OpenCV 的 Python 示例脚本和文档。
本章介绍了以下相关库:
- NumPy:此库是 OpenCV 的 Python 绑定的依赖项。 它提供数值计算功能,包括有效的数组。
- SciPy:此库是与 NumPy 密切相关的科学计算库。 OpenCV 不需要它,但是如果您希望在 OpenCV 映像中操作数据,则它很有用。
- OpenNI 2:此库是 OpenCV 的可选依赖项。 它增加了对某些深度相机的支持,例如 Asus Xtion PRO。
OpenCV 4 放弃了对 OpenNI 1 以及所有 OpenNI 1 模块(例如 SensorKinect)的支持。 此更改意味着 OpenCV 4 中可能不支持某些较旧的深度相机,例如 Microsoft Kinbox 的 Xbox 版本。
出于本书的目的,可以将 OpenNI 2 视为可选的。 它在第 4 章,“深度估计和分段”中使用,但在其他各章或附录中未使用。
本书重点介绍 OpenCV 4,这是 OpenCV 库的新主要发行版。 有关 OpenCV 的更多信息,请访问这个页面,官方文档可以在这个页面获得。
我们将在本章介绍以下主题:
- OpenCV 4 的新功能
- 选择和使用正确的设置工具
- 运行示例
- 查找文档,帮助和更新
技术要求
本章假定您正在使用以下操作系统之一:
- Windows 7 SP1 或更高版本
- macOS 10.7(Lion)或更高版本
- Debian Jessie 或更高版本,或诸如以下的衍生版本:
- Ubuntu 14.04 或更高版本
- Linux Mint 17 或更高版本
为了编辑 Python 脚本和其他文本文件,本书的作者仅建议您使用一个好的文本编辑器。 示例包括以下内容:
- Windows 的 NotePad++
- macOS 的 BBEdit(免费版)
- Linux 的 GNOME 桌面环境的 GEdit
- Linux 的 KDE Plasma 桌面环境
除操作系统外,此设置章节没有其他先决条件。
OpenCV 4 的新功能
如果您是 OpenCV 的资深人士,则在决定安装 OpenCV 4 之前,可能需要了解有关 OpenCV 4 更改的更多信息。 这儿是一些精彩片段:
- OpenCV 的 C++ 实现已更新为 C++ 11。 OpenCV 的 Python 绑定包装了 C++ 实现,因此,作为 Python 用户,即使我们不直接使用 C++,我们也可以从此更新中获得一些性能优势。
- 已删除了不推荐使用的 OpenCV C 实现和不推荐使用的 Python 绑定。
- 已经实现了许多新的优化。 现有的 OpenCV 3 项目可以利用其中的许多优化功能,而无需更新 OpenCV 版本。 对于 OpenCV C++ 项目,可以使用名为 G-API 的全新优化管道。 但是,OpenCV 的 Python 绑定当前不支持此优化管道。
- OpenCV 的 DNN 模块中提供了许多新的机器学习模型。
- 已删除训练 Haar 级联和 LBP 级联(以检测自定义对象)的工具。 建议在以后的 OpenCV 4 更新中重新实现这些工具以及对其他模型的支持。
- 现在支持 KinectFusion 算法(用于使用 Microsoft Kinect 2 相机进行三维重建)。
- 已添加了用于密集光流的 DIS 算法。
- 添加了一个新模块,用于检测和解码 QR 码。
无论您是否使用过 OpenCV 的先前版本,本书都将作为 OpenCV 4 的一般指南,并且某些新功能将在后续章节中得到特别注意。
选择和使用正确的设置工具
我们可以自由选择各种设置工具,具体取决于我们的操作系统以及我们要执行的配置数量。
无论选择哪种操作系统,Python 都会提供一些内置工具,这些工具对于设置开发环境非常有用。 这些工具包括一个名为pip
的包管理器和一个名为venv
的虚拟环境管理器。 本章的某些说明将专门介绍pip
,但如果您想了解venv
,请参阅官方 Python 文档。
如果您打算维护各种可能具有相互依赖关系的 Python 项目,则应考虑使用venv
-例如,依赖于不同版本的 OpenCV 的项目。 venv
的每个虚拟环境都有自己的已安装库集,我们可以在这些环境之间切换而无需重新安装任何东西。 在给定的虚拟环境中,可以使用pip
或在某些情况下使用其他工具来安装库。
让我们来概述适用于 Windows,macOS,Ubuntu 和其他类似 Unix 的系统的设置工具。
在 Windows 上安装
Windows 未预装 Python。 但是,有一个适用于 Python 的安装向导,Python 提供了一个名为pip
的包管理器,它使我们可以轻松地安装 NumPy,SciPy 和 OpenCV 的现成版本。 另外,我们可以从源代码构建 OpenCV,以启用非标准功能,例如通过 OpenNI 2 支持深度相机。OpenCV 的构建系统使用 CMake 来配置系统,并使用 Visual Studio 进行编译。
首先,让我们安装 Python。 访问这个页面并下载并运行适用于 Python 3.8 的最新安装程序。 您可能需要安装 64 位 Python 的安装程序,尽管 OpenCV 也可以使用 32 位 Python。
安装 Python 后,我们可以使用pip
安装 NumPy 和 SciPy。 打开命令提示符并运行以下命令:
> pip install numpy scipy
现在,我们必须决定是要使用现成的 OpenCV 版本(不支持深度相机)还是要定制版本(不支持深度相机)。 接下来的两个小节将介绍这些替代方案。
使用现成的 OpenCV 包
包含opencv_contrib
模块的 OpenCV 可以作为pip
包安装。 这就像运行以下命令一样简单:
> pip install opencv-contrib-python
如果您希望您的 OpenCV 安装包含非免费内容(例如获得专利的算法),则可以改为运行以下命令:
> pip install opencv-contrib-python-nonfree
如果您打算分发依赖于 OpenCV 的非免费内容的软件,则应自己调查专利和许可问题如何在特定国家和特定用例中应用。 OpenCV 的非免费内容包括获得专利的 SIFT 和 SURF 算法的实现,我们将在第 6 章,“检索图像并使用图像描述符进行搜索”的介绍。
您可能会发现这些pip
包之一提供了您当前想要的所有 OpenCV 功能。 另一方面,如果您打算使用深度相机,或者想了解制作 OpenCV 的自定义版本的一般过程,则不应安装 OpenCV pip
包; 您应该转至下一部分。
从源代码构建 OpenCV
如果要支持深度相机,还应该安装 OpenNI 2,它可以通过安装向导作为一组预编译的二进制文件获得。 然后,我们必须使用 CMake 和 Visual Studio 从源代码构建 OpenCV。
要获取 OpenNI 2,请访问这个页面,然后下载适用于 Windows 和系统架构(x64 或 x86)的最新 ZIP。 解压缩以获得安装文件,例如OpenNI-Windows-x64-2.2.msi
。 运行安装程序。
现在,让我们设置 Visual Studio。 要构建 OpenCV 4,我们需要 Visual Studio 2015 或更高版本。 如果您还没有合适的版本,请访问这个页面并下载并运行以下任一安装程序:
- 免费的 Visual Studio 2019 社区版
- 任何付费的 Visual Studio 2019 版本,都有 30 天的试用期
在安装过程中,请确保选择了所有可选的 C++ 组件。 安装完成后,请重新启动。
对于 OpenCV 4,构建配置过程需要 CMake 3 或更高版本。 访问这个页面,下载适用于您的架构(x64 或 x86)的最新版本 CMake 的安装程序,然后运行它。 在安装过程中,为所有用户选择将 CMake 添加到系统PATH
或为当前用户选择将 CMake 添加到系统PATH
。
在这个阶段,我们已经为我们的 OpenCV 自定义构建设置了依赖关系和构建环境。 现在,我们需要获取 OpenCV 源代码并进行配置和构建。 我们可以按照以下步骤进行操作:
- 访问这个页面并获取适用于 Windows 的最新 OpenCV 下载。 这是一个自解压的 ZIP。 运行它,并在出现提示时输入任何目标文件夹,我们将其称为
<opencv_unzip_destination>
。 在提取过程中,会在<opencv_unzip_destination>\opencv
创建一个子文件夹。 - 访问这个页面并下载
opencv_contrib
模块的最新 ZIP。 将此文件解压缩到任何目标文件夹,我们将其称为<opencv_contrib_unzip_destination>
。 - 打开命令提示符并运行以下命令,以建立将要进行构建的另一个文件夹:
> mkdir <build_folder>
将目录更改为build
文件夹:
> cd <build_folder>
- 现在,我们准备使用 CMake 的命令行界面配置构建。 要了解所有选项,我们可以阅读
<opencv_unzip_destination>\opencv\CMakeLists.txt
中的代码。 但是,出于本书的目的,我们只需要使用将为我们提供带有 Python 绑定,opencv_contrib
模块,非免费内容以及通过 OpenNI 2 的深度相机支持的发行版本的选项即可。某些选项略有不同,具体取决于 Visual Studio 版本和目标架构(x64 或 x86)。 若要为 Visual Studio 2019 创建 64 位(x64)解决方案,请运行以下命令(但将<opencv_contrib_unzip_destination>
和<opencv_unzip_destination>
替换为实际路径):
> cmake -DCMAKE_BUILD_TYPE=RELEASE -DOPENCV_SKIP_PYTHON_LOADER=ON
-DPYTHON3_LIBRARY=C:/Python37/libs/python37.lib
-DPYTHON3_INCLUDE_DIR=C:/Python37/include -DWITH_OPENNI2=ON
-DOPENCV_EXTRA_MODULES_PATH="<opencv_contrib_unzip_destination>
/modules" -DOPENCV_ENABLE_NONFREE=ON -G "Visual Studio 16 2019" -A x64 "<opencv_unzip_destination>/opencv/sources"
或者,要为 Visual Studio 2019 创建 32 位(x86)解决方案,请运行以下命令(但将<opencv_contrib_unzip_destination>
和<opencv_unzip_destination>
替换为实际路径):
> cmake -DCMAKE_BUILD_TYPE=RELEASE -DOPENCV_SKIP_PYTHON_LOADER=ON
-DPYTHON3_LIBRARY=C:/Python37/libs/python37.lib
-DPYTHON3_INCLUDE_DIR=C:/Python37/include -DWITH_OPENNI2=ON
-DOPENCV_EXTRA_MODULES_PATH="<opencv_contrib_unzip_destination>
/modules" -DOPENCV_ENABLE_NONFREE=ON -G "Visual Studio 16 2019" -A Win32 "<opencv_unzip_destination>/opencv/sources"
在前面的命令运行时,它将打印有关已找到或缺少的依赖项的信息。 OpenCV 具有许多可选的依赖项,因此不要对丢失依赖项感到恐慌。 但是,如果构建未成功完成,请尝试安装缺少的依赖项。 (许多都是预构建的二进制文件。)然后,重复此步骤。
- CMake 将在
<opencv_build_folder>/OpenCV.sln
处生成 Visual Studio 解决方案文件。 在 Visual Studio 中打开它。 确保在 Visual Studio 窗口顶部附近的工具栏中的下拉列表中选择了 Release 配置(而不是 Debug 配置)。 (由于大多数 Python 发行版不包含调试库,因此 OpenCV 的 Python 绑定可能不会在 Debug 配置中构建。)转到 BUILD 菜单并选择 Build Solution。 在窗口底部的“输出”窗格中查看构建消息,然后等待构建完成。 -
到此阶段,已经构建了 OpenCV,但尚未将其安装在 Python 可以找到它的位置。 在继续进行之前,让我们确保我们的 Python 环境尚未包含冲突的 OpenCV 版本。 在 Python 的 DLLs 文件夹和
site_packages
文件夹中查找和删除所有 OpenCV 文件。 例如,这些文件可能与以下模式匹配:C:\Python37\DLLs\opencv_*.dll
,C:\Python37\Lib\site- packages\opencv
和C:\Python37\Lib\site-packages\cv2.pyd
。 -
最后,让我们安装我们的自定义版本的 OpenCV。 作为
OpenCV.sln
Visual Studio 解决方案的一部分,CMake 生成了一个INSTALL
项目。 在 Visual Studio 窗口右侧的“解决方案资源管理器”窗格中查找“CMake 目标 | 安装”项目,右键单击它,然后从上下文菜单中选择“生成”。 再次,在窗口底部的“输出”窗格中查看构建消息,并等待构建完成。 然后,退出 Visual Studio。 编辑系统的Path
变量,并附加;<build_folder>\install\x64\vc15\bin (for a 64-bit build)
或;<build_folder>\install\x86\vc15\bin
(对于 32 位版本)。 该文件夹是INSTALL
项目放置 OpenCV DLL 文件的位置,这些文件是 Python 将在运行时动态加载的库文件。 OpenCV Python 模块位于C:\Python37\Lib\site-packages\cv2.pyd
之类的路径中。 Python 将在此处找到它,因此您无需将其添加到Path
中。 注销并重新登录(或重新启动)。
前面的说明涉及编辑系统的Path
变量。 可以在控制面板的环境变量窗口中完成此任务,如以下步骤所述:
-
单击“开始”菜单并启动控制面板。 现在,导航到“系统和安全性 | 高级系统设置”。 点击“环境变量...”按钮。
-
现在,在系统变量下,选择路径,然后单击“编辑...”按钮。
-
按照指示进行更改。
-
要应用更改,请单击所有“确定”按钮(直到我们回到“控制面板”的主窗口中)。
-
然后,注销并重新登录。(或者,重新启动。)
现在,我们已经完成了 Windows 上的 OpenCV 生成过程,并且有一个适用于本书所有 Python 项目的自定义生成。
将来,如果要更新到 OpenCV 源代码的新版本,请从下载 OpenCV 开始重复上述所有步骤。
在 macOS 上安装
macOS 随附了预安装的 Python 发行版,该发行版已由 Apple 根据系统的内部需求进行了自定义。 要开发我们自己的项目,我们应该进行单独的 Python 安装,以确保我们不与系统的 Python 需求冲突。
对于 macOS,有几种可能的方法来获取 Python 3,NumPy,SciPy 和 OpenCV 的标准版本。 所有方法最终都要求使用 Xcode 命令行工具从源代码编译 OpenCV。 但是,根据方法的不同,第三方工具会以各种方式自动完成此任务。 我们将使用称为 Homebrew 的包管理器来研究这种方法。 包管理器可以完成 CMake 可以做的所有事情,此外它还可以帮助我们解决依赖关系并将开发库与系统库分离。
MacPorts 是另一个流行的 macOS 包管理器。 但是,在撰写本文时,MacPorts 不提供适用于 OpenCV 4 或 OpenNI 2 的包,因此在本书中我们将不再使用它。
在继续之前,请确保正确设置了 Xcode 命令行工具。 打开一个终端并运行以下命令:
$ xcode-select --install
同意许可协议和任何其他提示。 安装应完成。 现在,我们有了 Homebrew 所需的编译器。
将 Homebrew 与现成的包一起使用
从已经设置了 Xcode 及其命令行工具的系统开始,以下步骤将通过 Homebrew 为我们提供 OpenCV 安装:
- 打开终端并运行以下命令来安装 Homebrew:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.github
usercontent.com/Homebrew/install/master/install)"
- Homebrew 不会自动将其可执行文件放入
PATH
。 为此,创建或编辑~/.profile
文件,然后在代码顶部添加以下行:
export PATH=/usr/local/bin:/usr/local/sbin:$PATH
保存文件并运行以下命令以刷新PATH
:
$ source ~/.profile
请注意,由 Homebrew 安装的可执行文件现在优先于由系统安装的可执行文件。
- 对于 Homebrew 的自我诊断报告,请运行以下命令:
$ brew doctor
遵循其提供的任何故障排除建议。
- 现在,更新 Homebrew:
$ brew update
- 运行以下命令以安装 Python 3.7:
$ brew install python
- 现在,我们要使用
opencv_contrib
模块安装 OpenCV。 同时,我们要安装依赖项,例如 NumPy。 为此,请运行以下命令:
$ brew install opencv
Homebrew 没有提供安装具有 OpenNI 2 支持的 OpenCV 的选项。 Homebrew 始终使用opencv_contrib
模块安装 OpenCV,包括非免费内容,例如获得专利的 SIFT 和 SURF 算法,我们将在第 6 章“检索图像并使用图像描述符进行搜索”中。 如果您打算分发依赖于 OpenCV 的非免费内容的软件,则应自己调查专利和许可问题如何在特定国家和特定用例中应用。
- 同样,运行以下命令来安装 SciPy:
$ brew install scipy
现在,我们拥有在 macOS 上使用 Python 开发 OpenCV 项目所需的一切。
将 Homebrew 与您自己的自定义包一起使用
万一您需要自定义包,Homebrew 可让您轻松编辑现有包定义:
$ brew edit opencv
包定义实际上是 Ruby 编程语言中的脚本。 可以在 Homebrew Wiki 页面上找到有关编辑它们的提示。 脚本可以指定 Make 或 CMake 配置标志等。
要查看与 OpenCV 相关的 CMake 配置标志,请参阅 GitHub 上官方 OpenCV 存储库。
对 Ruby 脚本进行编辑后,保存它。
定制包装可以视为正常包装。 例如,可以按以下方式安装:
$ brew install opencv
在 Debian,Ubuntu,Linux Mint 和类似系统上安装
Debian,Ubuntu,Linux Mint 和相关的 Linux 发行版使用apt
包管理器。 在这些系统上,很容易为 Python 3 和许多 Python 模块(包括 NumPy 和 SciPy)安装包。 也可以通过apt
获得 OpenCV 包,但在编写本文时,该包尚未更新为 OpenCV4。相反,我们可以从 Python 的标准包管理器pip
获得 OpenCV 4(不支持深度相机)。 ]。 或者,我们可以从源代码构建 OpenCV 4。 从源代码构建时,OpenCV 可以通过 OpenNI 2 支持深度摄像头,它可以作为带有安装脚本的一组预编译二进制文件提供。
无论我们采用哪种方式获取 OpenCV,我们都首先要更新apt
,以便我们可以获得最新的包。 打开一个终端并运行以下命令:
$ sudo apt-get update
更新apt
后,让我们运行以下命令为 Python 3 安装 NumPy 和 SciPy:
$ sudo apt-get install python3-numpy python3-scipy
等效地,我们可以使用 Ubuntu 软件中心,它是apt
包管理器的图形前端。
现在,我们必须决定是要使用现成的 OpenCV 版本(不支持深度相机)还是要定制版本(不支持深度相机)。 接下来的两个小节将介绍这些替代方案。
使用现成的 OpenCV 包
包含opencv_contrib
模块的 OpenCV 可以作为pip
包安装。 这就像运行以下命令一样简单:
$ pip3 install opencv-contrib-python
如果您希望 OpenCV 安装中包含非免费内容,例如获得专利的算法,则可以改为运行以下命令:
$ pip install opencv-contrib-python-nonfree
如果您打算分发依赖于 OpenCV 的非免费内容的软件,则应自己调查专利和许可问题如何在特定国家和特定用例中应用。 OpenCV 的非免费内容包括获得专利的 SIFT 和 SURF 算法的实现,我们将在第 6 章,“检索图像并使用图像描述符进行搜索”中介绍。
您可能会发现这些pip
包之一提供了您当前想要的所有 OpenCV 功能。 另一方面,如果您打算使用深度相机,或者要了解制作 OpenCV 的自定义版本的一般过程,则不应安装 OpenCV pip
包; 您应该转至下一部分。
从源代码构建 OpenCV
要从源代码构建 OpenCV,我们需要一个 C++ 构建环境和 CMake 构建配置系统。 具体来说,我们需要 CMake3。在 Ubuntu 14.04,Linux Mint 17 和相关系统上,cmake
包是 CMake 2,但也提供了最新的cmake3
包。 在这些系统上,运行以下命令以确保安装了必需版本的 CMake 和其他构建工具:
$ sudo apt-get remove cmake
$ sudo apt-get install build-essential cmake3 pkg-config
另一方面,在较新的操作系统上,cmake
包是 CMake 3,我们可以简单地运行以下命令:
$ sudo apt-get install build-essential cmake pkg-config
作为 OpenCV 构建过程的一部分,CMake 将需要访问互联网来下载其他依赖项。 如果您的系统使用代理服务器,请确保已正确配置代理服务器的环境变量。 具体来说,CMake 依赖于http_proxy
和https_proxy
环境变量。 要定义这些内容,您可以编辑~/.bash_profile
脚本并添加以下内容(但请对其进行修改,以使其与您自己的代理 URL 和端口号匹配):
export http_proxy=http://myproxy.com:8080
export https_proxy=http://myproxy.com:8081
如果不确定系统是否使用代理服务器,则可能不会,因此可以忽略此步骤。
要构建 OpenCV 的 Python 绑定,我们需要安装 Python 3 开发标头。 要安装这些文件,请运行以下命令:
$ sudo apt-get install python3-dev
要从典型的 USB 网络摄像头捕获帧,OpenCV 取决于 Linux 的视频(V4L)。 在大多数系统上,预先安装了 V4L,但为防万一它丢失,请运行以下命令:
$ sudo apt-get install libv4l-dev
如前所述,要支持深度摄像头,OpenCV 取决于 OpenNI 2.访问这个页面并下载适用于 Linux 和系统架构(x64 ,x86 或 ARM)。 将其解压缩到任何目标,我们将其称为<openni2_unzip_destination>
。 运行以下命令:
$ cd <openni2_unzip_destination>
$ sudo ./install.sh
前面的安装脚本对系统进行了配置,以使其将深度相机支持为 USB 设备。 此外,该脚本会创建引用<openni2_unzip_destination>
内部库文件的环境变量。 因此,如果您以后移动<openni2_unzip_destination>
,则需要再次运行install.sh
。
现在我们已经安装了构建环境和依赖项,我们可以获取并构建 OpenCV 源代码。 这样做,请按照下列步骤操作:
- 访问这个页面并下载最新的源包。 将其解压缩到任何目标文件夹,我们将其称为
<opencv_unzip_destination>
。 - 访问这个页面并下载
opencv_contrib
模块的最新源代码包。 将其解压缩到任何目标文件夹,我们将其称为<opencv_contrib_unzip_destination>
。 - 打开一个终端。 运行以下命令创建一个目录,我们将在其中放置 OpenCV 构建:
$ mkdir <build_folder>
转到新创建的目录:
$ cd <build_folder>
- 现在,我们可以使用 CMake 为 OpenCV 生成构建配置。 此配置过程的输出将是一组 Makefile,这是我们可以用来构建和安装 OpenCV 的脚本。
<opencv_unzip_destination>/opencv/sources/CMakeLists.txt
文件中定义了一套完整的 OpenCV CMake 配置选项。 为了我们的目的,我们关心与 OpenNI 2 支持,Python 绑定,opencv_contrib
模块和非自由内容有关的选项。 通过运行以下命令来配置 OpenCV:
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_EXAMPLES=ON -D WITH_OPENNI2=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D PYTHON3_EXECUTABLE=/usr/bin/python3.6 -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6 -D PYTHON3_LIBRARY=/usr/lib/python3.6/config-3.6m-x86_64-linux- gnu/libpython3.6.so -D OPENCV_EXTRA_MODULES_PATH=<opencv_contrib_unzip_destination> -D OPENCV_ENABLE_NONFREE=ON <opencv_unzip_destination>
- 最后,运行以下命令来解释我们新生成的 Makefile,从而构建和安装 OpenCV:
$ make -j8
$ sudo make install
到目前为止,我们已经在 Debian,Ubuntu 或类似系统上完成了 OpenCV 构建过程,并且我们有一个适用于本书所有 Python 项目的自定义构建。
在其他类似 Unix 的系统上安装
在其他类似 Unix 的系统上,包管理器和可用包可能会有所不同。 请查阅包管理员的文档,并搜索名称中带有opencv
的包。 请记住,OpenCV 及其 Python 绑定可能会分为多个包。
另外,查找系统提供商,存储库维护者或社区已发布的所有安装说明。 由于 OpenCV 使用摄像机驱动程序和媒体编解码器,因此在多媒体支持较差的系统上,使其所有功能正常工作可能会很棘手。 在某些情况下,可能需要重新配置或重新安装系统包才能兼容。
如果包可用于 OpenCV,请检查其版本号。 为了本书的目的,建议使用 OpenCV 4。 另外,请检查包是否通过 OpenNI 2 提供 Python 绑定和深度相机支持。最后,检查开发人员社区中是否有人报告使用包的成功或失败。
相反,如果您想从源代码进行 OpenCV 的自定义构建,则参考上一节针对 Debian,Ubuntu 和类似系统的步骤可能会有所帮助,并使这些步骤适应于包管理器和包中存在的包。 另一个系统。
运行示例
运行一些示例脚本是测试 OpenCV 是否已正确设置的好方法。 一些示例包含在 OpenCV 的源代码存档中。 如果尚未获得源代码,请访问这个页面并下载以下档案之一:
- 对于 Windows,下载最新的归档文件,标记为 Windows。 这是一个自解压的 ZIP。 运行它,并在出现提示时输入任何目标文件夹,我们将其称为
<opencv_unzip_destination>
。 在<opencv_unzip_destination>/opencv/samples/python
中找到 Python 示例。 - 对于其他系统,请下载标记为“来源”的最新存档。 这是一个 ZIP 文件。 将其解压缩到任何目标文件夹,我们将其称为
<opencv_unzip_destination>
。 在<opencv_unzip_destination>/samples/python
中找到 Python 示例。
一些示例脚本需要命令行参数。 但是,以下脚本(以及其他脚本)应该在没有任何参数的情况下运行:
hist.py
:此脚本显示照片。 按A
,B
,C
,D
或E
查看照片的变化,以及相应的颜色或灰度值直方图。opt_flow.py
:此脚本显示网络摄像头,其中叠加了光流的可视化效果,换句话说就是运动方向。 慢慢将手摇到网络摄像头,以查看效果。 按1
或2
进行可视化显示。
要退出脚本,请按Esc
(不是 Windows 关闭按钮)。
如果遇到ImportError: No module named cv2
消息,则表示我们正在从 Python 安装中运行脚本,而该脚本对 OpenCV 一无所知。 有两种可能的解释:
- OpenCV 安装中的某些步骤可能失败或错过。 返回并查看步骤。
- 如果在计算机上安装了多个 Python,则可能使用了错误版本的 Python 启动脚本。 例如,在 macOS 上,可能是为 Homebrew Python 安装了 OpenCV 的情况,但是我们正在使用系统版本的 Python 运行脚本。 返回并查看有关编辑系统
PATH
变量的安装步骤。 另外,请尝试使用以下命令从命令行手动启动脚本:
$ python hist.py
您也可以尝试以下命令:
$ python3.8 python/camera.py
作为选择其他 Python 安装的另一种可能的方法,请尝试编辑示例脚本以删除#!
行。 这些行可能会将脚本与错误的 Python 安装(对于我们的特定设置)明确关联。
查找文档,帮助和更新
可以在这个页面中找到 OpenCV 的文档,您可以在其中在线阅读或下载以供离线阅读。 如果您在飞机上或其他无法上网的地方编写代码,则肯定要保留文档的离线副本。
该文档包含有关 OpenCV C++ API 及其 Python API 的组合 API 参考。 查找类或函数时,请确保阅读标题为python
下的部分。
OpenCV 的 Python 模块名为cv2
。 cv2
中的2
与 OpenCV 的版本号无关。 我们确实在使用 OpenCV4。从历史上看,有一个cv
Python 模块封装了现在已经过时的 C 版本的 OpenCV。 cv
模块在 OpenCV 4 中不再存在。但是,有时 OpenCV 文档错误地将模块名称称为cv
而不是cv2
。 只需记住,在 OpenCV 4 中,正确的 Python 模块名称始终为cv2
。
如果文档似乎无法回答您的问题,请尝试与 OpenCV 社区联系。 在一些网站上,您会找到有用的人:
最后,如果您是高级用户,想尝试来自最新(不稳定)的 OpenCV 源代码的新功能,错误修复和示例脚本,请查看项目的资源库。
总结
到目前为止,我们应该已经安装了 OpenCV,可以满足本书中描述的各种项目的需求。 根据我们采用的方法,我们可能还会有一组工具和脚本,可用于重新配置和重建 OpenCV 以满足我们的未来需求。
现在,我们也知道在哪里可以找到 OpenCV 的 Python 示例。 这些样本涵盖了本书范围之外的其他功能范围,但它们可作为其他学习辅助工具。
在下一章中,我们将熟悉 OpenCV API 的最基本功能,即显示图像和视频,通过网络摄像头捕获视频以及处理基本的键盘和鼠标输入。