Python OpenCV #1 - OpenCV介绍

一、OpenCV介绍

1.1 OpenCV-Python教程简介

OpenCV由 Gary Bradsky 于1999年在英特尔创立,第一个版本于2000年发布。 Vadim Pisarevsky 加入了Gary Bradsky,管理英特尔的俄罗斯软件OpenCV团队。2005年,OpenCV被用于斯坦利,这辆车赢得了2005年DARPA大挑战赛。

后来,在Willow Garage的支持下,由Gary Bradsky和Vadim Pisarevsky领导该项目,继续积极发展。OpenCV现在支持与计算机视觉和机器学习相关的多种算法,并且正在日益扩展。

OpenCV支持多种编程语言,如C++、Python、Java等,并且可在包括Windows、Linux、OS X、Android和iOS的不同平台上使用。基于CUDA和OpenCL的高速GPU操作接口也在积极开发中。

OpenCV-Python是OpenCV的Python API,结合了OpenCV C++ API和Python语言的最佳品质。

1.2 OpenCV-Python

OpenCV-Python是一个Python绑定库,旨在解决计算机视觉问题。

Python是一种通用编程语言,由 Guido van Rossum 创立,很快就变得非常流行,主要是因为它的简单性和代码可读性。它使程序员能够在不降低可读性的情况下用更少的代码行表达思想。

与C/C++等语言相比,Python更慢。也就是说,Python可以很容易地用C/C++扩展,这允许我们用C/C++编写计算密集型代码,并创建可以用作Python模块的Python包装器。

这给我们带来了两个优势:首先,代码与原始C/C++代码一样快(因为它是在后台工作的实际C++代码),其次,用Python编写代码比C/C++更容易。OpenCV-Python是原始OpenCV C++实现的Python包装器。

OpenCV-Python使用了Numpy,这是一个高度优化的库,用于使用MATLAB风格的语法进行数值运算。所有OpenCV数组结构都可以转换为Numpy数组。这也使得它更容易与其他使用Numpy的库集成,如SciPy和Matplotlib。

1.3 OpenCV-Python教程

OpenCV引入了一组新的教程,将指导您完成OpenCV-Python中可用的各种函数。 本指南主要关注OpenCV 3.x版本(尽管大多数教程也适用于OpenCV 2.x)。

建议先了解Python和Numpy,因为本指南不会涉及它们。 熟练使用Numpy是使用OpenCV-Python编写优化代码的必要条件

本教程最初由Abid Rahman K.作为Google Summer of Code 2013计划的一部分,由Alexander Mordvintsev指导。

1.4 OpenCV需要你!

由于OpenCV是一个开源项目,欢迎所有人为库、文档和教程做出贡献。

如果您在本教程中发现任何错误(从小的拼写错误到代码或概念中的严重错误),请随时通过在GitHub中克隆的OpenCV并提交pull请求来纠正它。OpenCV开发人员将检查您的pull请求,给予您重要的反馈,并且(一旦通过审核者的批准)它将被合并到OpenCV中。您将成为一名开源贡献者 😃

随着新模块被添加到OpenCV-Python中,本教程将不得不进行扩展。如果你熟悉某个特定的算法,并且可以写一个教程,包括算法的基本理论和示例使用的代码,请这样做。

请记住,我们 一起 可以使这个项目取得巨大成功!

1.5 贡献者

下面是向OpenCV-Python提交教程的贡献者列表。

  1. Alexander Mordvintsev(GSoC-2013导师)
  2. Abid Rahman K.(GSoC-2013实习生)

1.6 额外资源

  1. Python快速指南 - Python的一个字节
  2. Python快速指南
  3. NumPy快速入门教程
  4. NumPy参考
  5. OpenCV文档
  6. OpenCV论坛

二、在Windows中安装OpenCV-Python

2.1 目标

在本教程中

  • 我们将学习在Windows系统中设置OpenCV-Python。

以下步骤在Windows 7-64位计算机上使用Visual Studio 2010和Visual Studio 2012进行测试。屏幕截图显示VS 2012。

2.2 从预构建的二进制文件安装OpenCV

下面的Python包将被下载并安装到它们的默认位置。

  • Python 3.x(3.4+)或Python 2.7.x(在)。
  • Numpy包(例如,使用 pip install numpy 命令)。
  • Matplotlib(pip install matplotlib)(Matplotlib是可选的,但推荐使用,因为我们在教程中经常使用它)。

将所有软件包安装到它们的默认位置。如果是Python 2.7,Python将安装到 C:/Python27/

安装完成后,打开Python IDLE。输入 import numpy 并确保Numpy工作正常。

GitHubSourceForge网站下载最新的OpenCV版本,然后双击将其解压缩。

转到 opencv/build/python/2.7 文件夹。

cv2.pyd 复制到 C:/Python 27/lib/site-packages

opencv_world.dll 文件复制到 C:/Python 27/lib/site-packages

打开Python IDLE,在Python终端中输入以下代码。

python 复制代码
>>> import cv2 as cv
>>> print( cv.__version__ )

如果结果打印出来没有任何错误,恭喜!您已成功安装OpenCV-Python。

2.3 从源代码构建OpenCV

下载并安装Visual Studio和CMake。

下载必要的Python包并将其安装到默认位置。

  1. Python
  2. Numpy

注意:

在本例中,我们使用Python包的32位二进制文件。但是如果你想在x64上使用OpenCV,需要安装Python包的64位二进制文件。问题是,Numpy没有官方的64位二进制文件。你得靠自己的力量。

为此,您必须使用与构建Python相同的编译器。当你启动Python IDLE时,它会显示编译器的详细信息。你可以在这里获得更多信息。因此,您的系统必须具有相同的Visual Studio版本,并从源代码构建Numpy。

另一种获得64位Python包的方法是使用来自第三方的现成Python发行版,如Anaconda,Enthought等,它会更大,但会有你需要的一切。一切都在shell中。您也可以下载32位版本。

确保Python和Numpy工作正常。

下载OpenCV源代码。它可以来自Sourceforge(官方发布版本)或Github(最新来源)。

将其解压缩到一个文件夹opencv,并在其中创建一个新的文件夹。

打开CMake-gui(Start > All Programs > CMake-gui

按如下方式填写字段(参见下图):

  1. 点击Browse Source...然后找到OpenCV文件夹。
  2. 点击Browse Build...然后找到我们创建的构建文件夹。
  3. 单击Configure。
  4. 它将打开一个新窗口来选择编译器。选择适当的编译器(此处为Visual Studio 11),然后单击"Finish"。
  5. 等待分析完成。

您将看到所有字段都标记为红色。点击 WITH 字段将其展开。它决定了你需要什么额外的功能。因此,标记适当的字段。请参见下图:

现在单击 BUILD 字段展开它。前几个字段配置构建方法。请参见下图:

其余字段指定要构建的模块。由于OpenCV-Python还不支持GPU模块,因此您可以完全避免它以节省保存时间(但如果您使用它们,请保留它)。请参见下图:

现在单击 ENABLE 字段将其展开。确保 ENABLE_SOLUTION_FOLDERS 未选中(Visual Studio Express版不支持解决方案文件夹)。请参见下图:

另外,请确保在 PYTHON 字段中,所有内容都已填充。(忽略PYTHON_DEBUG_LIBRARY)。见下图:

最后点击 Generate 按钮。

现在转到我们的 opencv/build 文件夹。在那里你会发现 OpenCV.sln 文件。用Visual Studio打开它。

将构建模式检查为 Release 而不是 Build

在解决方案资源管理器中,右键单击 Solution (或 ALL_BUILD)并构建它。这将需要一些时间才能完成(16)。

再次右键单击OpenCV-Python并构建它。现在OpenCV-Python将被安装(17)。

打开Python IDLE并输入"import cv 2 as cv"。如果没有错误,则说明安装正确。

注意:

我们所安装的没有其他支持,如TBB,Eigen,Qt,文档等。解释它在这里是很难的。我们很快就会添加更详细的视频,或者您可以直接在附近进行黑客操作。

2.4 额外资源

2.4.1 练习

如果你有一台windows机器,从源代码编译OpenCV,进行各种破解。如果您遇到任何问题,请访问OpenCV论坛并解释您的问题。

三、在Fedora中安装OpenCV-Python

3.1 目标

在本教程中

  • 我们将学习在Fedora系统中设置OpenCV-Python。以下步骤针对Fedora 18(64位)和Fedora 19(32位)进行了测试。

3.2 介绍

OpenCV-Python可以通过两种方式安装在Fedora中:

  1. 从fedora存储库中提供的预构建二进制文件安装。
  2. 从源代码编译。在本节中,我们将看到两者。

另一个重要的事情是需要额外的库。OpenCV-Python只需要 Numpy (除了其他依赖项,我们将在后面看到)。但在本教程中,我们也使用 Matplotlib 来实现一些简单而漂亮的绘图目的(与OpenCV相比,我感觉好多了)。Matplotlib是可选的,但强烈推荐。同样,我们还将看到 IPython,一个交互式Python终端,这也是强烈推荐的。

3.3 从预构建的二进制文件安装OpenCV-Python

以root用户身份在终端中使用以下命令安装所有软件包。

$ yum install numpy opencv*

打开Python IDLE(或IPython),在Python终端中输入以下代码。

python 复制代码
>>> import cv2 as cv
>>> print( cv.__version__ )

如果结果打印出来没有任何错误,恭喜!您已成功安装OpenCV-Python。

这很容易,但有一个问题。Yum仓库可能不总是包含最新版本的OpenCV。例如,在编写本教程时,yum存储库包含2.4.5,而最新的OpenCV版本是2.4.6。关于Python API,最新版本总是包含更好的支持。

此外,还可能会出现相机支持,视频播放等问题,这取决于驱动程序、ffmpeg、gstreamer软件包等。

所以我个人倾向于下一种方法,即从源代码编译。同样在某个时候,如果你想为OpenCV做贡献,你会需要这个。

3.4 从源代码安装OpenCV

从源代码编译可能看起来有点复杂,但一旦你成功了,就没有什么复杂的了。

首先,我们将安装一些依赖项。有些是强制的,有些是可选的。可选的依赖项,如果你不需要,可以不填。

3.4.1 强制依赖

我们需要CMake来配置安装,GCC用于编译,Python-devel和Numpy用于创建Python扩展等。

yum install cmake
yum install python-devel numpy
yum install gcc gcc-c++

接下来,我们需要GTK支持GUI功能、camera(libdc1394,v4l)和vedio(ffmpeg,gstreamer)等。

yum install gtk2-devel
yum install libdc1394-devel
yum install ffmpeg-devel yum install fmpeg-devel
yum install gstreamer-plugins-base-devel

3.4.2 可选依赖

以上依赖项足以在您的fedora机器中安装OpenCV。但根据您的需求,您可能需要一些额外的依赖项。下面给出了此类可选依赖项的列表。您可以选择安装或不安装它,由你决定 😃

OpenCV附带了支持PNG,JPEG,JPEG 2000,TIFF,WebP等图像格式的文件,但它可能有点旧。如果你想获得最新的库,你可以安装这些格式的开发文件。

yum install libpng-devel
yum install libjpeg-turbo-devel
yum install jasper-devel
yum install openexr-devel
yum install libtiff-devel
yum install libwebp-devel

一些OpenCV函数通过英特尔的线程构建块(TBB)并行化。但是如果你想启用它,你需要先安装TBB。(同样,在使用CMake配置安装时,不要忘记传递-D WITH_TBB= ON。更多细节见下文)

yum install tbb-devel

OpenCV使用另一个库Eigen来优化数学运算。因此,如果你的系统中安装了Eigen,你就可以利用它。(同时,在配置CMake安装时,不要忘记传递-D WITH_EIGEN= ON。更多细节见下文)

yum install eigen3-devel

如果你想建立文档(是的,你可以在你的系统中用HTML创建OpenCV完整官方文档的离线版本,并提供完整的搜索功能,这样你就不需要总是访问互联网,如果有任何问题,它是相当快的!)),您需要安装Doxygen(文档生成工具)。

yum install doxygen

3.4.3 下载OpenCV

接下来我们需要下载OpenCV。你可以从sourceforge站点下载OpenCV的最新版本。然后解压缩文件夹。

或者你可以从OpenCV的github repo下载最新的源代码(如果你想为OpenCV做贡献,请选择这个。它能让你的OpenCV保持最新)。首先,你需要安装 Git

yum install git
git clone https://github.com/opencv/opencv.git

它将在主目录(或您指定的目录)中创建一个文件夹OpenCV。克隆可能需要一些时间,具体取决于您的网络连接。

现在打开一个终端窗口并导航到下载的OpenCV文件夹。创建一个新的构建文件夹并导航到它。

mkdir build
cd build

3.4.4 配置和安装

现在我们已经安装了所有需要的依赖项,让我们安装OpenCV。安装必须使用CMake进行配置。它指定要安装的模块、安装路径、要使用的附加库、是否要编译文档和示例等。

下面的命令通常用于配置(从构建文件夹执行)。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

它指定构建类型为"Release Mode",安装路径为 /usr/local。注意每个选项前的"-D"和最后的".."。简而言之,这是格式:

cmake [-D <flag>] [-D <flag>] ..

您可以指定任意多个标志,但每个标志前面都应该有-D。

因此,在本教程中,我们将使用TBB和Eigen支持安装OpenCV。我们还构建文档,但不包括性能测试和构建示例。我们还禁用了GPU相关模块(因为我们使用OpenCV-Python,所以不需要GPU相关模块,这节省了我们一些时间)。

以下所有命令都可以在一个cmake语句中完成,但为了更好地理解,这里将其拆分。

  • 启用TBB和Eigen支持:

    cmake -D WITH_TBB=ON -D WITH_EIGEN=ON ..

  • 启用文档并禁用测试和示例:

    cmake -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF ..

  • 禁用所有GPU相关模块:

    cmake -D WITH_OPENCL=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF -D BUILD_opencv_gpucodec=OFF -D BUILD_opencv_gpufeatures2d=OFF -D BUILD_opencv_gpufilters=OFF -D BUILD_opencv_gpuimgproc=OFF -D BUILD_opencv_gpulegacy=OFF -D BUILD_opencv_gpuoptflow=OFF -D BUILD_opencv_gpustereo=OFF -D BUILD_opencv_gpuwarping=OFF ..

  • 设置安装路径并构建类型

    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

每次输入cmake语句时,它都会打印出生成的配置设置。在你得到的最终设置中,确保以下字段已填写(下面是我得到的配置的一些重要部分)。

这些字段也应该在您的系统中适当填写。否则就出问题了。检查你是否正确执行了上述步骤。

...
-- GUI:
-- GTK+ 2.x: YES (ver 2.24.19)
-- GThread : YES (ver 2.36.3)
 
-- Video I/O:
-- DC1394 2.x: YES (ver 2.2.0)
-- FFMPEG: YES
-- codec: YES (ver 54.92.100)
-- format: YES (ver 54.63.104)
-- util: YES (ver 52.18.100)
-- swscale: YES (ver 2.2.100)
-- gentoo-style: YES
-- GStreamer:
-- base: YES (ver 0.10.36)
-- video: YES (ver 0.10.36)
-- app: YES (ver 0.10.36)
-- riff: YES (ver 0.10.36)
-- pbutils: YES (ver 0.10.36)
 
-- V4L/V4L2: Using libv4l (ver 1.0.0)
 
-- Other third-party libraries:
-- Use Eigen: YES (ver 3.1.4)
-- Use TBB: YES (ver 4.0 interface 6004)
 
-- Python:
-- Interpreter: /usr/bin/python2 (ver 2.7.5)
-- Libraries: /lib/libpython2.7.so (ver 2.7.5)
-- numpy: /usr/lib/python2.7/site-packages/numpy/core/include (ver 1.7.1)
-- packages path: lib/python2.7/site-packages
 
...

还有许多其他的标志和设置。这是留给你进一步探索。

现在你使用make命令构建文件,并使用make install命令安装它。make install应该以root身份执行。

make
su
make install

安装结束了。所有文件都安装在 /usr/local/ 文件夹中。但是要使用它,你的Python应该能够找到OpenCV模块。你有两个选择

  • 将模块移动到Python Path中的任意文件夹 :在Python终端中输入 import sys; print(sys.path) 可以找到Python路径。它将打印出许多位置。将 /usr/local/lib/python2.7/site-packages/cv2.so 移动到此文件夹中的任何一个。比如说,

    su mv /usr/local/lib/python2.7/site-packages/cv2.so /usr/lib/python2.7/site-packages

  • 将 /usr/local/lib/python2.7/site-packages 添加到PYTHON_PATH中 :只需要执行一次。只需打开/.bashrc并添加以下代码,然后注销并返回。

    export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages

OpenCV安装完成。打开一个终端并尝试 import cv 2 as cv。

要构建文档,只需输入以下命令:

make doxygen

然后打开 opencv/build/doc/doxygen/html/index.html 并在浏览器中将其添加为书签。

3.5 额外资源

3.5.1 练习

  1. 在Fedora机器上从源代码编译OpenCV。

四、在Ubuntu中安装OpenCV-Python

4.1 目标

在本教程中,我们将学习如何在Ubuntu系统中安装OpenCV-Python。以下步骤针对Ubuntu 16.04和18.04(均为64位)进行了测试。

OpenCV-Python可以通过两种方式安装在Ubuntu中:

  1. 从Ubuntu存储库中提供的预构建二进制文件安装
  2. 从源代码编译。在本节中,我们将看到这两种。

另一个重要的事情是需要额外的库。OpenCV-Python只需要 Numpy (除了其他依赖项,我们将在后面看到)。但在本教程中,我们也使用 Matplotlib 来实现一些简单而漂亮的绘图目的(与OpenCV相比,我感觉好多了)。Matplotlib是可选的,但强烈推荐。同样,我们还将看到 IPython,一个交互式Python终端,这也是强烈推荐的。

4.2 从预构建的二进制文件安装OpenCV-Python

这种方法在仅用于编程和开发OpenCV应用程序时效果最佳。

在终端中使用以下命令安装python3-opencv软件包(作为root用户)。

$ sudo apt-get install python3-opencv

打开Python IDLE(或IPython),在Python终端中输入以下代码。

python 复制代码
import cv2 as cv
print(cv.__version__)

如果结果打印出来没有任何错误,恭喜!您已成功安装OpenCV-Python。

这很容易。但这有一个问题。Apt存储库可能不总是包含最新版本的OpenCV。例如,在编写本教程时,apt存储库包含2.4.8,而最新的OpenCV版本是3.x。

关于Python API,最新版本总是包含更好的支持和最新的错误修复。

因此,为了获得最新的源代码,首选的方法是下一个方法,即从源代码编译。此外,如果你想为OpenCV做贡献,你也会需要这个。

4.3 从源代码构建OpenCV

从源代码编译可能看起来有点复杂,但一旦你成功了,就没有什么复杂的了。

首先,我们将安装一些依赖项。有些是强制的,有些是可选的。可选的依赖项,如果你不需要,可以不填。

4.3.1 强制依赖

我们需要 CMake 来配置安装, GCC 用于编译, Python-develNumpy 用于构建Python绑定等。

sudo apt-get install cmake
sudo apt-get install gcc g++

支持Python 2:

sudo apt-get install python-dev python-numpy

支持Python 3:

sudo apt-get install python3-dev python3-numpy

接下来,我们需要GTK支持GUI、camera(v4l)、media(ffmpeg,gstreamer)等。

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

支持GTK 2:

sudo apt-get install libgtk2.0-dev

支持GTK 3:

sudo apt-get install libgtk-3-dev

4.3.2 可选依赖

以上依赖项足以在您的fedora机器中安装OpenCV。但根据您的需求,您可能需要一些额外的依赖项。下面给出了此类可选依赖项的列表。您可以选择安装或不安装它,由你决定 😃

OpenCV附带了支持PNG,JPEG,JPEG 2000,TIFF,WebP等图像格式的文件,但它可能有点旧。如果你想获得最新的库,你可以安装这些格式的开发文件。

yum install libpng-devel 安装libpng-devel
yum install libjpeg-turbo-devel
yum install jasper-devel
yum install openexr-devel
yum install libtiff-devel
yum install libwebp-devel

注意:

如果您使用的是Ubuntu 16.04,您还可以安装 libjasper-dev 以添加对JPEG 2000格式的系统级支持。

4.3.3 下载OpenCV

从OpenCV的GitHub Repository下载最新的源代码。(如果你想为OpenCV做贡献,请选择此选项。为此,您需要先安装 Git)。

$ sudo apt-get install git
$ git clone https://github.com/opencv/opencv.git

它将在当前目录下创建一个文件夹"opencv"。克隆可能需要一些时间,具体取决于您的网络连接。

现在打开一个终端窗口,导航到下载的"opencv"文件夹。创建一个新的"build"文件夹并导航到它。

$ mkdir build
$ cd build

4.3.4 配置和安装

现在我们已经有了所有需要的依赖项,让我们安装OpenCV。安装必须使用CMake进行配置。它指定要安装的模块、安装路径、要使用的附加库、是否要编译文档和示例等。

大多数工作都是通过配置良好的默认参数自动完成的。

以下命令通常用于配置OpenCV库构建(从构建文件夹执行):

$ cmake ../

OpenCV默认假定"Release"构建类型,安装路径为"/usr/local"。有关CMake选项的更多信息,请参阅OpenCV C++编译指南

您应该在CMake输出中看到这些行(它们意味着正确找到了Python):

-- Python 2:
-- Interpreter: /usr/bin/python2.7 (ver 2.7.6)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6)
-- numpy: /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.8.2)
-- packages path: lib/python2.7/dist-packages
--
-- Python 3:
-- Interpreter: /usr/bin/python3.4 (ver 3.4.3)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython3.4m.so (ver 3.4.3)
-- numpy: /usr/lib/python3/dist-packages/numpy/core/include (ver 1.8.2)
-- packages path: lib/python3.4/dist-packages

现在使用"make"命令构建文件并使用"make install"命令安装它。

$ make
# sudo make install

安装结束了。所有文件都安装在"/usr/local/"文件夹中。打开一个终端并尝试 import cv2。

python 复制代码
import cv2 as cv
print(cv.__version__)