![OpenCV项目开发实战(原书第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/564/30842564/b_30842564.jpg)
1.2 安装开发机
我们可以在台式机、笔记本电脑、甚或简陋的树莓派上开发OpenCV应用程序(参见1.5节)。我们开发的大多数应用程序占用的内存都不会超过128兆字节,因此它们仍然可以在老旧电脑或是低性能机器上运行(尽管速度缓慢)。为了省时,最好先在最快的机器上开发,然后再在那些较慢机器上进行测试。
本书假设在你的开发机器上已安装了下列操作系统之一:
·Windows 7 SP 1或更高版本
·Mac OS 10.7(Lion)或更高版本
·Debian Jessie或更高版本,或下列衍生版本:
·Raspbian 2015-09-25或更高版本
·Ubuntu 14.04或更高版本
·Linux Mint 17或更高版本
·Fedora 28或更高版本,或下列衍生版本:
·RHEL 8或更高版本
·CentOS 8或更高版本
·openSUSE Leap 42.3、openSUSE Leap 15.0或更高版本,openSUSE Tumbleweed或衍生版本。
其他类Unix系统也能够工作,但不在本书讨论范围之内。
你要准备一个USB网络摄像头及其必要的驱动程序。大多数网络摄像头都提供了在Windows和Mac上安装驱动程序的说明。通常,Linux发行版包括USB视频类(USB Video Class,UVC)Linux驱动程序,在http://www.ideasonboard.org/uvc/#devices中列出了它支持的许多网络摄像头。
我们将安装下列组件:
·在Mac上,第三方包管理器将帮助我们安装库及这些库的依赖项。我们将使用MacPorts或Homebrew。
·Python开发环境——在本书编写期间,OpenCV支持Python 2.7、3.4、3.5、3.6和3.7版本。本书中的Python代码支持所有这些版本。作为Python开发环境的一部分,我们将使用Python包管理器pip。
·流行的Python库,例如NumPy(用于数值函数)、SciPy(用于数值和科学函数)、Requests(用于Web请求)、wxPython(用于跨平台的图形用户接口GUI)。
·PyInstaller,一种跨平台的工具,用于将Python脚本、库和数据打包成可分发的应用程序,这样用户机就无须安装Python、OpenCV和其他的库了。就本书而言,创建可再分发的Python项目是一个可选的主题。我们将在第2章中介绍基础知识,但你需要自行测试和调试,因为PyInstaller(与其他Python打包工具类似)在不同操作系统、Python版本和库版本中所展示出的行为并不完全一致。PyInstaller不能很好地支持树莓派或其他ARM设备。
·我们还可以选择使用C++开发环境从而从源代码编译OpenCV。在Windows上,我们使用Visual Studio 2015或后续版本。在Mac上,我们使用Xcode。在Linux上,我们使用标准GCC编译器。
·Python支持OpenCV和opencv_contrib(一组额外的OpenCV模块)的编译,并对某些桌面硬件进行优化。在编写本书时,OpenCV 4.0.x是最新的稳定版本,我们的指令是为该版本量身定制的。但是,总的来说,本书中的代码也适用于之前的稳定版本OpenCV 3.4.x,对于那些喜欢预先打包编译的用户来说,OpenCV 3.4.x是更广泛使用的一个版本。
·OpenCV的另一个版本支持Java,并对某些Android硬件进行优化。在编写本书时,OpenCV 4.0.1是最新的发布版本。
·Android开发环境包括Android Studio和Android SDK。
·在64位Windows或Mac上,一个名为Unity的三维游戏引擎。
Android Studio占用很大的内存,即使你希望用树莓派来开发桌面应用程序或Pi应用程序,但是开发Android应用程序仍需要使用更多的内存。
对于Python和OpenCV环境,让我们将安装过程分解为三组平台相关的步骤,对于Android Studio和OpenCV环境加上一组与平台无关的步骤,对于Unity和OpenCV环境再加上另一组与平台无关的步骤。
1.2.1 在Windows上安装Python和OpenCV
在Windows上,我们可以选择安装32位开发环境(使应用程序同时兼容32位或64位Windows)或64位开发环境(使优化后的应用程序只兼容64位Windows)。OpenCV适用于32位和64位版本。
我们还可以选择使用二进制安装程序,或从源代码编译OpenCV。对于本书中的Windows应用程序而言,二进制安装程序足以满足我们的一切需求。但是,我们还讨论了从源代码进行编译的安装选项,因为这种方法可以让我们能够对其他属性(这些属性可能与你未来的工作有关或与其他书中的项目相关)进行配置。
不管如何获取OpenCV,我们都需要一个通用的Python开发环境。我们将使用一个二进制安装程序来安装这个环境。从http://www.python.org/getit/可以获得Python安装程序。下载并运行Python 3.7的最新修订版本(32位版本或64位版本)。
默认情况下,要使用新安装的Python 3.7运行Python脚本,让我们来编辑一下系统的Path变量并添加;C:\Python3.7(假设你的Python 3.7安装在默认位置)。删除之前的所有Python路径,例如;C:\Python2.7。注销并重新登录(或重新启动)。
Python自带一个名为pip的包管理器,它简化了安装Python模块及其依赖项的任务。打开命令行窗口输入并运行以下命令来安装numpy、scipy、requests、wxPython和pyinstaller:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/005-2-i.jpg?sign=1739285688-B0dZ54OxzqRKd8Pa6fu1biaaS1jKeJae-0-f8571a7d78147d79006dfbc9b8f783cd)
现在,我们有一个选择,我们可以将OpenCV和opencv_contrib的二进制文件作为一个预编译的Python模块安装,我们也可以从源代码编译这个模块。要安装一个预编译模块,只需要运行如下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/005-3-i.jpg?sign=1739285688-3kdV3D28abLf2CqdSq52lRZNh71vQsuB-0-831ad12b6686b281fd17e63b0978d266)
或者,要从源代码编译OpenCV和opencv_contrib,可以按照“在Windows上用CMake和Visual Studio编译OpenCV”一节中的说明进行操作。
无论是安装预编译的OpenCV和opencv_contrib模块,还是从源代码编译OpenCV和opencv_contrib模块,我们都拥有了为Windows开发OpenCV应用程序所需的一切。如果要开发Android应用程序,我们还需要按照1.3节所述内容来安装Andorid Studio。
在Windows上用CMake和Visual Studio编译OpenCV
要从源码编译OpenCV,我们需要一个通用的C++开发环境。我们使用Visual Studio 2015或更高版本作为C++开发环境。可以使用你购买的任意一个安装媒介,或访问https://visualstudio.microsoft.com/downloads/,下载并运行下列安装程序之一:
·Visual Studio Community 2017,是免费的。
·Visual Studio 2017付费版,有30天的免费试用期。
如果安装程序列出了可选的C++组件,我们应该选择安装所有选项。安装程序运行完成后,重新启动。
OpenCV使用了一组必须安装的名为CMake的编译工具。或者,我们可以选择安装一些第三方库来启用OpenCV中的额外功能。作为一个例子,让我们来安装Intel线程构建块(Thread Building Block,TBB),OpenCV可以利用TBB来优化多核CPU的一些功能。安装了TBB之后,我们将配置和编译OpenCV。最后,我们将确保我们的C++和Python环境能够找到我们编译的OpenCV。
下面是详细的步骤:
1)从https://cmake.org/download/下载并安装CMake的最新稳定版本。需要CMake 3或最新版本。即使我们使用的是64位库和编译器,32位CMake也是兼容的。当安装程序询问更新PATH变量时,请选择“Add CMake to the system PATH for all users”或“Add CMake to the system PATH for current user”。
2)如果你的系统使用代理服务器访问网络,请定义两个环境变量:HTTP_PROXY和HTTPS_PROXY,这两个环境变量的值等于代理服务器的URL,如http://myproxy.com:8080。这就确保CMake可以使用代理服务器下载OpenCV的一些附加依赖。(如果你不确定,请不要定义这些环境变量。你可能没有使用代理服务器。)
3)从http://opencv.org/releases.html下载OpenCV Win包(选择最新版本)。下载的文件可能有一个.exe扩展名,但这实际上是一个自解压的ZIP文件。双击该文件,在出现提示时输入任意一个目标文件夹,我们将其命名为<opencv_unzip_destination>,将创建一个子文件夹<opencv_unzip_destination>/opencv。
4)从https://github.com/opencv/opencv_contrib/releases下载opence_contrib的ZIP包(选择最新版本)。将其解压到任意一个目标文件夹,并将其命名为<opencv_contrib_unzip_destination>。
5)从https://www.threadingbuildingblocks.org/download下载TBB的最新稳定版本。它同时包含了32位和64位二进制文件。将其解压到任意一个目标文件夹中,并将其命名为<tbb_unzip_destination>。
6)打开命令提示符。创建一个文件夹来保存我们的编译:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/007-i.jpg?sign=1739285688-9UXVnNVNzGz9JgU8B3V9ceZhKnWIFqDK-0-3713920e34070654cc18ab0b2cb52bde)
将目录更改为新创建的编译文件夹:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/007-2-i.jpg?sign=1739285688-UF4R3o7aTqAdFPzRz5jhG1gWugSL7myf-0-375e4da9dd75d30ae52b8def6ee6d1f1)
7)安装好依赖项之后,就可以配置OpenCV的编译系统了。要理解所有的配置选项,我们可以阅读<opencv_unzip_destination>/opencv/sources/CMakeLists.txt中的代码。但是,作为一个例子,我们将只使用包含Python绑定和通过TBB进行多处理的一个发行版编译的选项。
·要为Visual Studio 2017创建一个32位的项目,请运行以下命令(用实际路径替换尖括号中的内容)
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/007-3-i.jpg?sign=1739285688-wP743jOgbccKThWFwuXrasJDXbs4Yqf0-0-12375b72089d0f6bcb58ff8e5d49a94d)
·或者,要为Visual Studio 2017创建一个64位的项目,请运行以下命令(用实际路径替换尖括号中的内容)
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/007-4-i.jpg?sign=1739285688-P9Vh8hrn7lCzKoVNiOyYDQTXzxE4v36H-0-2635061c977b17c3b6aa840c9dc38ee7)
·CMake将生成它是否找到依赖项的一个报告。OpenCV有很多可选的依赖项,所以不必担心缺少依赖项。但是,如果编译没有成功完成,请尝试安装这些缺少的依赖项(很多都可以作为预编译的二进制文件使用)。然后,重复该步骤。
8)现在我们的编译系统已配置好了,我们可以编译OpenCV了。在Visual Studio中打开<build_folder>/OpenCV.sln。选择“Release”配置并构建解决方案。(如果你选择了“Release”以外的其他编译配置,则可能会出现错误,因为大多数Python安装都不包含调试库)。
9)我们应该确保我们的Python安装不包括其他版本的OpenCV。在Python DLL文件夹和Python site-packages文件夹中查找并删除所有OpenCV文件。例如,这些文件的路径可能与C:\Python37\DLLs\opencv_*.dll,C:\Python37\Lib\sitepackages\opencv和C:\Python37\Lib\sitepackages\cv2.pyd模式匹配。
10)最后,我们需要将OpenCV安装到Python和其他进程可以找到的一个位置。为此,右键单击OpenCV解决方案的“INSTALL”项目(位于Visual Studio的“Solution Explorer”面板)并对其进行编译。当这个编译完成后,退出Visual Studio。编辑系统的Path变量并添加;<build_folder>\install\x86\vc15\bin(32位编译)或;<build_folder>\install\x64\vc15\bin(64位编译),这正是OpenCV DLL文件所在的位置。同样,添加;<tbb_unzip_destination>\lib\ia32\vc14(32位)或;<tbb_unzip_destination>\lib\intel64\vc14(64位),这是TBB DLL文件所在的位置。注销并重新登录(或重新启动)。OpenCV的Python模块位于诸如C:\Python37\Lib\site-packages\cv2.pyd之类的路径上。Python可以找到路径所在的位置,因此你不需要再执行任何步骤。
如果你使用的是Visual Studio 2015,那么请用vs2015替换vs2017,用Visual Studio 14 2015替换Visual Studio 15 2017,用vc14替换vc15。但是要注意,对TBB而言,名为vc14的文件夹包含适用于Visual Studio 2015和Visual Studio 2017的DLL文件。
你或许想要查看<opencv_unzip_destination>/opencv/sources/samples/python中的代码示例。
此刻,我们已经准备好了为Windows开发OpenCV应用程序的所有内容。如果还要开发Android应用程序,我们需要安装Android Studio,请参阅1.3节的内容。
1.2.2 在Mac上安装Python和OpenCV
Mac已经预先安装了Python。但是,Apple公司已经根据系统的内部需求对预先安装的Python进行了定制。通常,在Apple的Python上我们不应该安装任何库。如果我们安装了库,库很可能会在系统更新时中断,甚至更糟的是,我们安装的这些库很可能与系统所需要的预装库发生冲突。相反,我们应该安装标准的Python 3.7,然后在其上安装我们所需要的库。
对于Mac,有多种获取标准Python 3.7及其Python兼容库的方法,例如OpenCV。最终,所有这些方法都需要使用Xcode developer工具从源代码编译某些组件。但是,根据我们选择的方法,编译这些组件的任务是由第三方工具以各种方式自动完成的。
首先,让我们设置Xcode和Xcode命令行工具,这些工具为我们提供了一个完整的C++开发环境:
1)从Mac应用程序商店或https://developer.apple.com/xcode/下载并安装Xcode。如果安装程序提供了安装命令行工具的一个选项,那么选中它。
2)打开Xcode,如果出现许可协议,则选择接受。
3)如果还没有安装命令行工具,现在就必须安装这些命令行工具。转到“Xcode|Preferences|Downloads”,单击命令行工具旁边的“Install”按钮。等待安装完成。然后退出Xcode。或者,如果你在Xcode中没有找到安装命令行工具的选项,那么打开终端并运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/009-i.jpg?sign=1739285688-LT4LbFefsxlnJs0PQoIheZYblRCCZxJT-0-26dbc6fc5fa46b22ef184f716914c7c7)
现在,我们将研究使用MacPorts或Homebrew实现自动编译的方法。这两个工具都是包管理器,它们帮助我们解决依赖问题,并将开发库与系统库进行分离。
通常,我推荐MacPorts。与Homebrew相比,MacPorts为OpenCV提供了更多的修补程序和配置选项。另外,Homebrew为OpenCV提供了更及时的更新。在编写本书时,Homebrew为OpenCV 4.0.1提供了一个软件包,但MacPorts还停留在OpenCV 3.4.3版本。Homebrew和MacPorts都可以与Python包管理器pip共存,尽管MacPorts还没有打包这个版本,但是我们仍可以使用pip来获得OpenCV 4.0.1。通常,不应该在同一台机器上安装MacPorts和Homebrew。
对于Mac,我们的安装方法并没有给出OpenCV的示例项目。要获取这些示例,可从https://opencv.org/releases.html下载最新的源代码包,并解压到任意位置。在<opencv_unzip_destination>/samples/python中找到示例。
现在,可以根据你的个人喜好,开始选择性阅读1.2.2.1节或1.2.2.2节的内容。
1.2.2.1 Mac上的MacPorts
MacPorts提供自动下载、编译和安装各种开源软件(Open Source Software,OSS)的终端命令。MacPorts还根据需要安装这些依赖项。在一个名为Portfile的配置文件中定义了软件的每个部分、依赖项和编译方法。因此,一个MacPorts库就是一个Portfiles集合。
让我们从一个已安装了Xcode及其命令行工具的系统开始吧!下列步骤将通过MacPorts为我们提供一个OpenCV的安装方法。
1)从http://www.macports.org/install.php下载并安装MacPorts。
2)打开终端,并运行以下命令来更新MacPorts:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/009-2-i.jpg?sign=1739285688-wUYyENLQ6NyV3INMWsl6XARnlciiml0Z-0-fea734e33277c36fc2d8a249e6bb6f7c)
在出现提示时,输入你的密码。
3)运行以下命令,安装Python3.7、pip、NumPy、SciPy和Requests:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/010-i.jpg?sign=1739285688-HrPwT9es5agw0RmwOyluwGnFlwzDJ2nL-0-80690d67b44ec2fc7e43f269752d6362)
4)Python安装的可执行文件名为python 3.7。要将默认的Python可执行文件链接到Python3.7,并将默认的pip可执行文件链接到这个Python pip安装,让我们来运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/010-2-i.jpg?sign=1739285688-K1cZ7FL6IwoY81vY4JPnqO2BVQo403nD-0-5a559c9ff02bcc2d8f7299ae3999b417)
5)在编写本书时,MacPorts只有wxPython和PyInstaller相对较低版本的包。让我们使用下面的pip命令安装最新的版本吧:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/010-3-i.jpg?sign=1739285688-L07E91OFVtznOivEUikjwVZnQfqiSqN4-0-b6f3b974d94efcfcfc68b6a9d448ecb9)
6)要检查MacPorts是否有一个OpenCV 4包,运行$port list opencv。在编写本书时,会输出下列信息:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/010-4-i.jpg?sign=1739285688-Cndrc0GocknKgdBTVV8Runz4vNxUFMVq-0-54d17f5dc1b8644a1a49eb49f0eb999a)
·这里,@3.4.3表示OpenCV 3.4.3是MacPorts的最新可用包。但是,如果你的输出显示的是@4.0.0或更新的版本,那么你就可以用MacPorts配置、编译和安装OpenCV 4,运行如下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/010-5-i.jpg?sign=1739285688-swLDVYEsd5NfBcOXwW26ySDaOGvME4gJ-0-3084d37a6c94ad30d2348db13497c999)
·通过在命令中添加+avx2+contrib+opencl+python37,我们指定希望opencv变体(编译配置)具有AVX2 CPU优化、open_contrib附加模块、OpenCL GPU优化和Python3.7绑定。要在安装前查看可用变体的完整列表,可以输入以下内容:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/010-6-i.jpg?sign=1739285688-5WwyO9O4DZEp6saOmeiX0j31v6P3uC8s-0-622b00171f541c7861c9ba59d9cb7308)
·根据我们的自定义需求,我们可以将其他变体添加到install命令。
·另一方面,如果$port list opencv的输出显示MacPorts还没有OpenCV 4包,我们可以用pip代替安装OpenCV 4和opencv_contrib附加模块,运行下列命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/010-7-i.jpg?sign=1739285688-3pfvkVrlMYHjYA8r6BCd2bIl1gGKLFLA-0-c6232f050a134409ccb01dd7aca193d7)
现在,我们已经拥有了为Mac开发OpenCV应用程序所需的一切内容。同样,要为Android开发应用程序,我们需要安装Android Studio,我们将会在1.3节中介绍Android Studio。
1.2.2.2 Mac上的Homebrew
与MacPorts类似,Homebrew也是一个包管理器,提供终端命令自动下载、编译和安装各种开源软件。
下面我就从一个已经安装了Xcode及其命令行工具的系统开始,下列步骤将为我们提供一个通过Homebrew安装OpenCV的方法:
1)打开终端,运行如下命令,安装Homebrew:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/011-i.jpg?sign=1739285688-i1ZumMyLaUf9z9l5esfpoVesIX4FQRdN-0-500faeeae18899092a97afba42b4059e)
2)与MacPorts不同的是,Homebrew不会自动将其可执行文件放入PATH中。为此,创建或编辑~/.profile文件,并在首行添加下列内容:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/011-2-i.jpg?sign=1739285688-aGt1fbs3QSjBIMVwVc9amqbM1q9FXO61-0-27439d8db8a684d28fbf5ea66c2754ca)
·保存文件,运行如下命令,刷新PATH:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/011-3-i.jpg?sign=1739285688-By5yVQWx4fGuwSJmeTETWHsRLJ2YtMgt-0-34b1fa9bc9435de86395450c7d3d4aca)
·注意,现在Homebrew安装的可执行文件比系统安装的可执行文件具有更高的优先权。
3)查看Homebrew的自检报告,运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/011-4-i.jpg?sign=1739285688-39fWgYoUcB1ZeLoRmHSFG49LXnaKrycy-0-5d1af911ddc9e363948279b94e2aad4b)
遵照给出的所有故障排除建议。
4)现在,更新Homebrew:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/011-5-i.jpg?sign=1739285688-tGqkyxuphR10jOSzamzpM6K4zQMFC7JZ-0-deae3b1a5bfdae5f63c9bc18dc24ee86)
5)运行以下命令,安装Python 3.7:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/011-6-i.jpg?sign=1739285688-CSU1VqKdLfJltEW1yk6SCFsl1K1ba6Be-0-44bd4b7ff6908d9685e83c17989afdc6)
6)现在,我们可以使用Homebrew安装OpenCV以及包括NumPy在内的依赖项了。运行如下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/011-7-i.jpg?sign=1739285688-NpDTIQShp9NHsAqWDMwo6rHvGoqG64GJ-0-3ac783bbbca6e2b4e623792095d77b40)
7)同样的,运行如下命令安装SciPy:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/011-8-i.jpg?sign=1739285688-zoD2eUWmtTy4EVDK4edFLnoXEkl2UdUc-0-4016f37c5a936ec54b8b26adc5c3883b)
8)在编写本书时,Homebrew还没有requests包和pyinstaller包,并且它的wxPython包也是一个相对较低的版本,因此我们将使用pip来安装这些模块。运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/011-9-i.jpg?sign=1739285688-gx8LYRBZJYZcY3IQEOVM8yG21G55xaWH-0-b8a2536985df30afcfd2f3fc2b89ff96)
现在,我们已经具备为Mac开发OpenCV应用程序所需的一切内容。同样,要开发Android应用程序,我们需要安装Tegra Android开发包(Tegra Android Development Pack,TADP),我们会在后文中介绍。
1.2.3 在Debian Jessie及其衍生系统(包括Raspbian、Ubuntu和Linux Mint)上安装Python和OpenCV
有关安装Raspbian操作系统的相关内容,可参阅1.5节。
在Debian Jessie、Raspbian、Ubuntu、Linux Mint及其衍生系统上,Python事先安装好的可执行文件是Python 2.7。我们可以使用系统包管理器apt安装标准库中的NumPy、SciPy和Request。要更新apt包索引并安装这些包,请在终端下运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/012-i.jpg?sign=1739285688-P5nliAPViAQ6OWj0xCdyx8Xa3GiYscHf-0-5724e25618ee980bd768cef86f1ed2f9)
标准库中wxPython包的最新版各不相同,这取决于具体的操作系统。在Ubuntu 14.04及其衍生版本(包括Linux Mint 17)上,包的最新版本是wxPython 2.8。运行以下命令进行安装:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/012-2-i.jpg?sign=1739285688-OXuE5ecq9KMdyoMT0YwN7H9GXR3l1xJn-0-c98d73c563cb678b446e8d5d5fa986b7)
在Ubuntu 18.04及其更高版本,以及Linux Mint 19等衍生系统上,包的最新版本是wxPython 4.0。运行如下命令进行安装:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/012-3-i.jpg?sign=1739285688-bQJMOEtPUnrBrJfPRt55bwVFC8dgWZAi-0-d139fbed9c13efe0064f51d12212293b)
在Debian Jessie系列的大多数其他系统上,wxPython 3.0是包的最新版本。运行如下命令进行安装:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/012-4-i.jpg?sign=1739285688-xh8Us0faQfEhtbcgBP6isOfqnBVkxRwh-0-4127d61b1c9627f4e138a6a5a063f08b)
标准库中没有提供PyInstaller包。让我们使用Python自带的包管理器pip来获取PyInstaller。首先,要确认安装了pip,运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/012-5-i.jpg?sign=1739285688-Sg3I42RLz81aTBpkOvyVxZ1UMWd7pQTR-0-97586771f892573506450fd2d381ed24)
现在,运行以下命令,安装PyInstaller。
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/012-6-i.jpg?sign=1739285688-JIA30Ey4xRmGn9oVLcx8OKRpRbPjV2Vt-0-7c103003e8c4a705c0b8ee7ae7c3efa1)
标准库包含了一个python-opencv包,但却是一个较低版本(3.2.0或更低版本,这取决于操作系统),并且缺少opencv_contrib模块,因此就缺少了本书中会用到的一些功能。因此,我们既可以选择使用pip来获取拥有opencv_contrib模块的OpenCV 4,也可以从源代码构建OpenCV 4。想要用pip安装OpenCV 4的预编译版本和opencv_contrib模块,请运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/013-i.jpg?sign=1739285688-kJEpu9S9qeh41oll3YaYLuUX6TVC7ECH-0-6d62fbf9d22fce63444bf9be7597e782)
如果你喜欢使用Python 3的可执行文件,即Python 3.4或更高版本(取决于操作系统),请修改上述指令中的所有apt-get命令,用python 3-numpy之类的包名替换python-numpy之类的包名。同样,用pip3命令替换pip命令。
或者,想要从源代码编译OpenCV和opencv_contrib,可按“用CMake和GCC在Debian Jessie及其衍生系统上编译OpenCV”一节中的指令进行操作。
无论是安装了预编译的OpenCV和opencv_contrib模块,还是从源代码编译,在这之后,我们就具备了为Debian Jessie或衍生系统开发OpenCV应用程序所需的一切内容。同样,想要开发Android应用程序,我们需要安装Android Studio,请参考1.3节。
用CMake和GCC在Debian Jessie及其衍生系统上编译OpenCV
要从源代码编译OpenCV,我们需要一个通用的C++开发环境。在Linux上,标准的C++开发环境包含g++编译器和Make构建系统,其中Make构建系统以一个Makefile文件格式定义构建指令。
OpenCV使用一组名为CMake的构建工具,该构建工具自动使用Make、g++以及其他工具。我们需要安装CMake 3或一个更新的版本。此外,我们还将安装几个第三方库。其中一些是标准OpenCV特性所必需的,还有一些是可选的、用于支持一些额外特性的依赖项。
作为一个例子,让我们安装下面这些可选依赖项:
·libdc1394:这是一个以编程方式控制IEEE 1394(火线)摄像头的库,这在工业应用领域中很常见。OpenCV可以利用这个库从这些摄像头采集照片或视频。
·libgphoto2:这是一个通过有线或无线连接以编程方式控制摄像机的库。libphoto2库支持大量来自于佳能、富士、徕卡、尼康、奥林巴斯、松下、索尼和其他厂商的摄像机。OpenCV可以利用这个库从这些摄像机采集照片和视频。
在安装完这些依赖项之后,我们将配置、编译、安装OpenCV。详细步骤如下:
1)在Ubuntu 14.04及其衍生版本(包括Linux Mint 17)上,标准库中的cmake包是CMake 2,这对于我们的目标来说太过陈旧。我们需要确保没有安装cmake包,然后我们需要安装cmake 3包以及其他必要的开发和打包工具。要完成这些,请运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/013-i.jpg?sign=1739285688-kJEpu9S9qeh41oll3YaYLuUX6TVC7ECH-0-6d62fbf9d22fce63444bf9be7597e782)
在Ubuntu的最新版本及其衍生版本以及Debian Jessie上,cmake 3包并不存在,而cmake就是CMake 3。运行下列命令安装cmake及其他必要的开发和打包工具:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/013-2-i.jpg?sign=1739285688-BMNKChldvxMvoG0rWzHmVIl6wJp1qMCk-0-649049c55e58f12e93c4e8a1e50baacc)
2)如果你的系统使用代理服务器访问网络,那么定义两个环境变量:HTTP_PROXY和HTTPS_PROXY,它们的值等于代理服务器的URL,例如http://myproxy.com:8080。这样确保CMake可以使用代理服务器为OpenCV下载一些附加依赖项。(如果不确定,不要定义这两个环境变量。你可能没有使用代理服务器。)
3)运行以下命令安装OpenCV的依赖项,这些依赖项用于Python绑定以及从Video-4Linux(V4L)兼容摄像头进行视频采集(包含大多数网络摄像头)。
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/014-i.jpg?sign=1739285688-vQpdn4yXPgCXav5DMjXVI4uo432C0dUg-0-8dee1984c1afefb1a04325d7a3a22901)
如果你更喜欢用Python 3,那么在上述命令中用Python 3-dev替换python-dev。
4)运行下列命令,安装可选的OpenCV依赖项:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/014-2-i.jpg?sign=1739285688-XIoR2rl10cVUmV26UCNVGk5L5vK3btPf-0-eded5fd76243dd6995c998e0cf338f07)
5)从http://opencv.org/releases.html下载OpenCV源代码的ZIP压缩包(选择最新版本)。解压至任意一个目标文件夹中,我们将其命名为<opencv_unzip_destination>。
6)从https://github.com/opencv/opencv_contrib/releases下载opence_contrib的一个ZIP压缩包(选择最新版本)。解压至任意一个目标文件夹中,我们将其命名为<opencv_contrib_unzip_destination>。
7)打开命令提示符。创建一个文件夹用以存储我们的编译:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/014-3-i.jpg?sign=1739285688-3Zhh6GhphtCEdvXycHpFqgceshVbg7RB-0-5de3798898b4c9edfc7ec385439f390b)
将目录更改为新创建的编译文件夹:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/014-4-i.jpg?sign=1739285688-gsAXDaNlsAKSGXudmxRHxBe6Dk8vwl6j-0-f44f5c6c540d413e04090abb7aad7841)
8)安装完我们的依赖项后,现在我们来配置OpenCV的构建系统。要想理解所有配置选项,我们可以阅读<opencv_unzip_destination>/opencv/sources/CMakeLists.txt中的代码。但是,作为一个示例,我们将只用到一个发布构建的选项,包含Python绑定、支持OpenGL互操作性以及支持附加摄像头类型和视频类型。要使用Python 2.7绑定为OpenCV创建Makefiles,运行以下命令(但要用实际路径替换尖括号及其中的内容):
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/014-5-i.jpg?sign=1739285688-84lUFpFFBxa1Ck6nDFTRamaL1QeLs4ot-0-eb08ffbbdde47bf207e89b06b10d6250)
或者,要使用Python 3绑定为OpenCV创建Makefiles,运行以下命令(用实际路径替换尖括号及其中的内容,并且如果你的Python 3的版本不是3.6的话,用你的实际版本号替换3.6):
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/015-i.jpg?sign=1739285688-4qIp0zrXQw4SbE7JNjL6HCm9dmZo0axs-0-b2425064aacd9f9f6b0f15d842336a77)
9)运行以下命令,用Makefiles指定的方式编译并安装OpenCV:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/015-2-i.jpg?sign=1739285688-mUaTiQwAb4X6jxBfvkVZJ9B6L4JmMLQJ-0-a9b5f1afb37e515e79bc79a6aa1dd0cc)
现在,我们已经具备了为Debian Jessie及其衍生系统开发OpenCV应用程序所需的一切内容了。同样,要为Android开发应用程序,我们还需要安装Android Studio,在1.3节中有介绍。
1.2.4 在Fedora及其衍生系统(包括RHEL和CentOS)上安装Python和OpenCV
在Fedora、RHEL和CentOS上,预先安装的Python可执行文件是Python 2.7。我们可以使用系统包管理器yum安装标准库的Numpy、SciPy、Requests和wxPython。要完成这一安装过程,请打开终端并运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/015-3-i.jpg?sign=1739285688-FnXjUccl4zD3z1tyzSBkQVoOguwE6WYP-0-bf573e0f98895bf8cea0dbb2936b4cdc)
标准库并没有提供一个PyInstaller包。相反,我们使用Python自己的包管理器pip来获取PyInstaller。首先,要确保已安装了pip,请运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/015-4-i.jpg?sign=1739285688-Al0USdv67zfxtijYK5ERhZQz6C5Q8MdX-0-e4cf06f2d5ca58582093613377f0aec3)
现在,运行下面的命令,安装PyInstaller。
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/015-5-i.jpg?sign=1739285688-ATZ4lTWMNzjB1ddKla8xBB8VBCrAYEqo-0-76a66bd290a50a06d1ace7e230539a04)
标准库中包含了一个opencv包,而且这个包还包括了opencv_contrib模块和Python绑定,但却是一个较低版本(3.4.4或更低版本,取决于具体的操作系统)。因此,我们想使用pip获得OpenCV4和opencv_contrib模块。运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/015-6-i.jpg?sign=1739285688-IvasfaBP1MGIretkBn5LU24bVIlGNKxS-0-c6c755a0a65fc232022fb353caa4287f)
如果你更喜欢使用python 3可执行文件,不管是Python 3.6还是3.7(取决于具体的操作系统),需将上述pip命令用pip3命令替换。你不需要修改yum命令,因为像numpy之类的相关包已经包括了Python 2和Python 3的子包。
现在,我们已经具备了在Fedora及其衍生系统上开发OpenCV应用程序所需的一切内容。同样,要想为Android开发应用程序,我们需要安装Android Studio,在1.3节将对其进行介绍。
1.2.5 在openSUSE及其衍生系统上安装Python和OpenCV
在openSUSE上,预先安装的python可执行文件是Python2.7。我们可以使用系统包管理器yum安装标准库的NumPy、SciPy、Requests和wxPython。要完成这一安装,请打开终端并运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/016-i.jpg?sign=1739285688-PGfE813A2RAZBPAvJR5W0OYLOZACkBYH-0-14d071667d4a35938ebf681546515a52)
尽管openSUSE和Fedora都使用yum包管理器,但是它们所使用的标准库却是不同的,并且包的名称也是不一样的。
标准库没有提供PyInstaller包。作为替代,我们可以使用Python自带的包管理器pip来获取PyInstaller。首先,确保已安装好了pip,请运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/016-2-i.jpg?sign=1739285688-5ZveS0f7HFmrDXu99jXqJPY619VlMO7a-0-e3c4f437d98b3a52341221dce236bd9e)
现在,通过运行以下命令,安装PyInstaller:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/016-3-i.jpg?sign=1739285688-01zP159wY1VuuiYla2vfhlKHTaLJGqfm-0-925b1a778ebbe8548f23424e4ceb6ae8)
标准库包含一个python2-opencv包(以及Python 3的一个python3-opencv包),但这是OpenCV的一个较低版本(3.4.3或更低版本,取决于具体的操作系统)。因此,我们想要使用pip来获取OpenCV 4以及opencv_contrib模块。运行以下命令:
![](https://epubservercos.yuewen.com/42D324/16768000705017206/epubprivate/OEBPS/Images/016-4-i.jpg?sign=1739285688-PyicFz3hum4nPFicNLOO2JxXNGgV4pVH-0-73a4fbf69e178fd5913094fe39a53e9e)
如果你更喜欢使用Python 3可执行文件,无论是Python 3.4,还是3.6,或是3.7(这取决于具体的操作系统),请将上述pip命令替换为pip 3命令。你并不需要修改yum命令,因为像python-numpy之类的相关包已经包含了Python 2和Python 3的子包。
现在,我们已经具备了为openSUSE及其衍生系统开发OpenCV应用程序所需的一切内容。接下来,我们需要按照跨平台步骤来安装一个Android开发环境。