Ubuntu 16.04: How to install OpenCV
参考:https://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/
步骤# 1:安装opencv的依赖项
本教程中的大部分(实际上全部)步骤将通过使用您的终端来完成。 首先,打开命令行并更新apt-get软件包管理器以刷新和升级以及预先安装的软件包/库:
1 sudo apt-get update
2 sudo apt-get upgrade
接下来,让我们安装一些开发者工具:
1 sudo apt-get install build-essential cmake pkg-config
pkg-config软件包(非常有可能)已经安装在你的系统上,但为了以防万一,一定要将它包含在上面的apt-get命令中。 cmake程序用于自动配置我们的OpenCV版本。
OpenCV是一个图像处理和计算机视觉库。 因此,OpenCV需要能够从磁盘加载各种图像文件格式,例如JPEG,PNG,TIFF等。为了从磁盘加载这些图像,OpenCV实际上调用了其他图像I / O库,它们实际上有助于加载和解码 处理。 我们在下面安装必要的:
1 sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
好的,现在我们有图书馆从磁盘加载图像 - 但视频呢? 使用以下命令来安装用于处理视频流和从相机访问帧的软件包:
1 sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
2 sudo apt-get install libxvidcore-dev libx264-dev
OpenCV通过一套非常有限的GUI工具提供开箱即用的功能。 这些GUI工具允许我们在屏幕上显示图像(cv2.imshow),等待/记录按键(cv2.waitKey),跟踪鼠标事件(cv2.setMouseCallback)以及创建简单的GUI元素,如滑块和轨迹条。 同样,你不应该期望用OpenCV构建完整的GUI应用程序 - 这些只是简单的工具,可以让你调试代码并构建非常简单的应用程序。
在内部,处理OpenCV GUI操作的模块的名称是highgui。 highgui模块依赖于GTK库,您应该使用以下命令安装它:
1 sudo apt-get install libgtk-3-dev
接下来,我们安装用于优化OpenCV内部各种功能的库,例如矩阵操作:
1 sudo apt-get install libatlas-base-dev gfortran
我们将通过为Python 2.7和Python 3.5安装Python开发头文件和库(这两种方式)来完成第1步:
1 sudo apt-get install python2.7-dev python3.5-dev
注意:如果你没有安装Python开发头文件和静态库,你将在步骤4中遇到问题,我们运行cmake来配置我们的版本。 如果没有安装这些头文件,那么cmake命令将无法自动确定Python解释器和Python库的正确值。 简而言之,本节的输出将显示为“空白”,您将无法构建Python绑定。 当你到达第4步时,花时间比较你的命令输出到我的。
步骤#2:下载OpenCV源代码
在本文发布时,OpenCV的最新版本是3.1.0,我们使用以下命令下载.zip并解压缩:
cd ~ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip unzip opencv.zip
当新版本的OpenCV发布后,您可以检查官方OpenCV GitHub并通过更改.zip的版本号下载最新版本。
但是,我们尚未完成下载源代码 - 我们还需要opencv_contrib存储库:
1 wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
2 unzip opencv_contrib.zip
为什么我们要麻烦的去下载contrib?
那么,我们希望OpenCV 3的完整安装能够访问诸如SIFT和SURF等功能(无双关语)。 在OpenCV 2.4中,SIFT和SURF被包含在OpenCV的默认安装中。 然而,随着OpenCV 3+的发布,这些软件包已被转移到contrib中,该软件包含(1)当前正在开发的模块或(2)标记为“非空闲”(即已获得专利)的模块。 您可以在此博客文章中了解有关SIFT / SURF重组背后原因的更多信息。
注意:您可能需要在复制和粘贴过程中使用“<=>”按钮扩展上述命令。 3.1.0.zip中的.zip可能会在较小的浏览器窗口中被截断。 为了方便,我已经包含了opencv归档文件的完整URL以及下面的opencv_contrib归档文件:
- https://github.com/Itseez/opencv/archive/3.1.0.zip
- https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
我也想提一下,你的opencv和opencv_contrib版本应该是一样的(在这种情况下,3.1.0)。如果版本号不匹配,则可能会很容易地遇到编译时错误(或更糟糕的是,运行时错误几乎无法调试)。
第3步:设置您的Python环境 - Python 2.7或Python 3
我们现在准备开始为构建配置我们的Python开发环境。 第一步是安装Python包管理器pip:
cd ~ wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py
我在每一篇我曾经做过的OpenCV + Python安装教程中都提到了这一点,但今天我会在这里再次提到它:我是virtualenv和virtualenvwrapper的忠实粉丝。 这些Python软件包允许您为每个正在处理的项目创建单独的独立Python环境。
简而言之,使用这些软件包可以解决“Project X取决于版本1.x,但Project Y需要4.x困境。 使用Python虚拟环境的一个奇妙的副作用是你可以保持你的系统Python整洁,整洁并且没有混乱。
虽然你肯定可以在没有Python虚拟环境的情况下使用Python绑定来安装OpenCV,但是我强烈建议你使用它们,因为其他PyImageSearch教程利用Python虚拟环境。 我也会假设你已经在本指南的其余部分安装了virtualenv和virtualenvwrapper。
如果您想要详细解释为什么Python虚拟环境是最佳实践,那么您绝对应该在RealPython上阅读这篇优秀的博客文章。 我还提供了一些关于为什么我个人更喜欢本教程前半部分的Python虚拟环境的评论。
再次,让我重申,Python社区的标准做法是利用某种虚拟环境,所以我建议你也这样做:
sudo pip install virtualenv virtualenvwrapper sudo rm -rf ~/get-pip.py ~/.cache/pip
一旦我们安装了virtualenv和virtualenvwrapper,我们需要更新我们的〜/ .bashrc文件,在文件底部包含以下行:
# virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
〜/ .bashrc文件只是一个shell脚本,只要你启动一个新的终端,Bash就会运行。 您通常使用此文件来设置各种配置。 在这种情况下,我们设置了一个名为WORKON_HOME的环境变量,以指向Python虚拟环境所在的目录。 然后我们从virtualenvwrapper加载任何必要的配置。
要更新你的〜/ .bashrc文件,只需使用标准的文本编辑器即可。 我会推荐使用nano,vim或emacs。 你也可以使用图形编辑器,但如果你刚刚开始使用,nano可能是最容易操作的。
更简单的解决方案是使用cat命令并完全避免编辑器:
echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.bashrc echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
在编辑〜/ .bashrc文件后,我们需要重新加载更改:
source ~/.bashrc
注意:只需为我们当前的shell会话调用一次.bashrc上的源代码。 任何时候我们打开一个新的终端,.bashrc的内容将自动执行(包括我们的更新)。
现在我们已经安装了virtualenv和virtualenvwrapper,下一步是实际创建Python虚拟环境 - 我们使用mkvirtualenv命令执行此操作。
但是在执行这个命令之前,你需要做出一个选择:你想使用Python 2.7还是Python 3?
您选择的结果将决定您在以下部分中运行的命令。
创建你的Python虚拟环境
如果您决定使用Python 2.7,请使用以下命令创建Python 2.7虚拟环境:
mkvirtualenv cv -p python2
否则,请使用此命令创建一个Python 3虚拟环境:
mkvirtualenv cv -p python3
无论您决定使用哪种Python命令,最终结果都是我们已经创建了一个名为cv(简称为“计算机视觉”)的Python虚拟环境。
无论你喜欢什么,你都可以命名这个虚拟环境(并且创建尽可能多的Python虚拟环境),但是对于时间来说,我会建议坚持使用cv名称,因为这是我将在整个剩余部分使用的教程。
验证您是否在“cv”虚拟环境中
如果你曾经重启过你的Ubuntu系统, 注销并重新登录; 或者打开一个新的终端,您需要使用workon命令重新访问您的cv虚拟环境。 下面是一个workon命令的例子:
workon cv
要验证您是否在cv虚拟环境中,只需检查您的命令行 - 如果您在提示符之前看到文本(cv),则说明您处于cv虚拟环境中:
Figure 1: Make sure you see the “(cv)” text on your prompt, indicating that you are in the cv virtual environment.
否则,如果您没有看到cv文本,那么您不在cv虚拟环境中:
Figure 2: If you do not see the “(cv)” text on your prompt, then you are not in the cv virtual environment and need to run the “workon” command to resolve this issue.
要访问cv虚拟环境,只需使用上述的workon命令。
将NumPy安装到您的Python虚拟环境中
编译OpenCV之前的最后一步是安装NumPy,一个用于数值处理的Python包。 要安装NumPy,请确保您处于cv虚拟环境中(否则NumPy将被安装到Python的系统版本而不是cv环境中)。 从那里执行以下命令:
pip install numpy
步骤#4:在Ubuntu 16.04上配置和编译OpenCV
在这一点上,我们已经安装了所有必要的先决条件 - 我们现在准备编译和OpenCV!
但在此之前,请检查您的提示(您应该看到前面的(cv)文本),然后仔细检查您是否在cv虚拟环境中,如果没有,请使用workon命令:
workon cv
确保您进入cv虚拟环境后,我们可以使用CMake来设置和配置我们的版本:
cd ~/opencv-3.1.0/ mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \ -D BUILD_EXAMPLES=ON ..
上述命令将目录更改为〜/ opencv-3.1.0,如果您一直关注本教程,那么您将下载并取消存档.zip文件。
注意:如果遇到与stdlib.h有关的错误:在本教程的cmake或make阶段中没有这样的文件或目录,您还需要在CMake中包含以下选项:-D ENABLE_PRECOMPILED_HEADERS = OFF。 在这种情况下,我会建议删除您的构建目录,重新创建它,然后使用上述选项重新运行CMake。 这将解决stdlib.h错误。 感谢Carter Cherry和Marcin在评论部分指出了这一点!
在这个目录中,我们创建一个名为build的子目录并将其更改为它。 构建目录是实际编译将要发生的地方。
最后,我们执行cmake来配置我们的构建。
在我们开始实际编译OpenCV之前,请确保您检查CMake的输出!
为此,向下滚动标题为Python 2和Python 3的部分。
如果您正在使用Python 2.7支持在Ubuntu 16.04上编译OpenCV,请确保Python 2部分包含解释器,库,numpy和包路径的有效路径。 你的输出应该类似于我的下面: