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归档文件:

我也想提一下,你的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.

 

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. 

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和包路径的有效路径。 你的输出应该类似于我的下面:

Figure 3: Ensuring that Python 2.7 will be used when compiling OpenCV 3 for Ubuntu 16.04.

Figure 3: Ensuring that Python 2.7 will be used when compiling OpenCV 3 for Ubuntu 16.04.

检查这个输出,你可以看到:

1.解释器指向cv虚拟环境中的Python 2.7二进制文件。

2.库指向Python 2.7库(我们在步骤#1的最后一步安装)。

3.numpy值指向我们在cv虚拟环境中的NumPy安装。

4.最后,packages路径指向lib / python2.7 / site-packages。 当与CMAKE_INSTALL_PREFIX结合使用时,这意味着在编译OpenCV之后,我们会在/usr/local/lib/python2.7/site-packages/中找到我们的cv2.so绑定。

同样,如果您使用Python 3支持编译OpenCV 16.04,则需要确保您的Python 3部分与下面的代码类似:

Figure 4: Validating that Python 3 will be used when compiling OpenCV 3 for Ubuntu 16.04.

Figure 4: Validating that Python 3 will be used when compiling OpenCV 3 for Ubuntu 16.04.

再次注意我的解释器,库,numpy和包路径是如何被正确设置的。

如果在这些可变路径中看不到cv虚拟环境,那几乎可以肯定是因为在运行CMake之前,您不在cv虚拟环境中!

如果确实如此,只需调用workon cv访问cv虚拟环境,然后重新运行上述的CMake命令。

假设你的CMake命令没有任何错误退出,你现在可以编译OpenCV:

make -j4

-j开关控制编译OpenCV时要使用的进程数量 - 您需要将此值设置为机器上的处理器/内核数量。 就我而言,我有一个四核处理器,所以我设置了-j4。

使用多个进程可以让OpenCV更快地编译; 然而,有些时候竞赛条件受到打击,编辑炸弹爆炸了。 虽然你真的不知道这是否是没有很多以前的经验编译OpenCV的情况下,如果你遇到了错误,我的第一个建议是运行make clean刷新构建,然后编译只使用一个单一的 核心:

make clean
make

下面你可以在Ubuntu 16.04上找到一个成功的OpenCV + Python编译的屏幕截图:

Figure 5: Successfully compiling OpenCV 3 for Ubuntu 16.04.

Figure 5: Successfully compiling OpenCV 3 for Ubuntu 16.04.

最后一步是在Ubuntu 16.04上实际安装OpenCV 3:

sudo make install
sudo ldconfig

第5步:完成OpenCV安装

你正在完成的路上,只需再走几步,你的Ubuntu 16.04系统将全部使用OpenCV 3进行设置。

For Python 2.7:

运行sudo make install之后,您的Python 2.7绑定OpenCV 3现在应该位于/usr/local/lib/python-2.7/site-packages/中。 您可以使用ls命令来验证它:(为完,待续..............)

ls -l /usr/local/lib/python2.7/site-packages/
total 1972
-rw-r--r-- 1 root staff 2016608 Sep 15 09:11 cv2.so

注意:在某些情况下,您可能会发现OpenCV安装在/usr/local/lib/python2.7/dist-packages而不是/usr/local/lib/python2.7/site-packages(note dist-packages vs 网站包)。 如果您的cv2.so绑定不在site-packages目录中,请务必检查dist-pakages。

最后一步是将我们的OpenCV cv2.so绑定链接到Python 2.7的cv虚拟环境中:

cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so

 For Python 3.5:

运行sudo make install后,您的OpenCV + Python 3绑定应位于/usr/local/lib/python3.5/site-packages/中。 再次,您可以使用ls命令验证这一点:

ls -l /usr/local/lib/python3.5/site-packages/
total 1972
-rw-r--r-- 1 root staff 2016816 Sep 13 17:24 cv2.cpython-35m-x86_64-linux-gnu.so

自OpenCV 3发布以来,我一直对这种行为感到困惑,但由于某种原因,在编译OpenCV和Python 3支持时,输出cv2.so文件名是不同的。 实际的文件名可能会有所不同,但它应该类似于cv2.cpython-35m-x86_64-linux-gnu.so。

再次,我不知道为什么发生这种情况,但这是一个非常简单的解决方案。 我们所需要做的就是重命名文件:

cd /usr/local/lib/python3.5/site-packages/
sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so

在将cv2.cpython-35m-x86_64-linux-gnu.so重命名为cv2.so之后,我们可以将我们的OpenCV绑定对接到Python 3.5的cv虚拟环境中:

cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so

步骤#6:测试你的OpenCV安装

恭喜,您现在已经在您的Ubuntu 16.04系统上安装了OpenCV 3!

验证您的安装是否正常运行:

1.打开一个新的终端。

2.执行workon命令来访问cv Python虚拟环境。

3.尝试导入Python + OpenCV绑定。

我已经演示了如何执行以下步骤:

cd ~
workon cv
python
Python 3.5.2 (default, Jul  5 2016, 12:43:10) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>

正如你所看到的,我可以将我的OpenCV绑定导入到我的Python 3.5 shell中。

下面是我使用本教程中概述的相同步骤并将OpenCV绑定导入Python 2.7外壳的屏幕截图:

Figure 6: Ensuring that I can successfully import my Python + OpenCV bindings on Ubuntu 16.04.

Figure 6: Ensuring that I can successfully import my Python + OpenCV bindings on Ubuntu 16.04.

因此,无论您决定使用哪种Python版本,只需按照本教程中详述的步骤进行操作即可在Ubuntu 16.04系统上安装OpenCV + Python。

一旦安装了OpenCV,您可以删除opencv-3.1.0和opencv_contrib-3.1.0目录(及其关联的.zip文件):

cd ~
rm -rf opencv-3.1.0 opencv_contrib-3.1.0 opencv.zip opencv_contrib.zip

但是,运行这个命令时要小心! 你需要确保你已经在你的系统上正确安装了OpenCV,然后再沿着这些目录。 否则,您将需要重新启动整个编译过程!

接下来干什么?

恭喜!您现在在您的Ubuntu 16.04系统上安装了全新的OpenCV - 我确定您只是想利用您的安装来构建一些出色的计算机视觉应用程序......

......但我也愿意打赌,你刚刚开始学习计算机视觉和OpenCV,并可能感到有点困惑和不知所措,从哪里开始。

就我个人而言,我是一个很好的学习榜样的粉丝,所以,一个好的第一步是获得一些乐趣,并阅读这篇博客文章,探讨图像/视频中的猫。本教程旨在非常实用,并演示如何(快速)构建Python + OpenCV应用程序以检测图像中是否存在猫。

如果你真的对提高计算机视觉技能感兴趣,你一定要看看我的书,实用Python和OpenCV +案例研究。我的书不仅涵盖计算机视觉和图像处理的基础知识,还教你如何解决真实世界的计算机视觉问题,包括图像和视频流中的人脸检测,视频中的对象跟踪以及手写识别。

curious_about_cv

因此,让我们在Ubuntu 16.04系统上安装全新的OpenCV 3,以便于使用 - 只需单击此处即可详细了解可使用实用Python和OpenCV解决的实际项目。

posted @ 2018-03-22 09:48  feifanren  阅读(3790)  评论(0编辑  收藏  举报