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提交教程的贡献者列表。
- Alexander Mordvintsev(GSoC-2013导师)
- Abid Rahman K.(GSoC-2013实习生)
1.6 额外资源
二、在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工作正常。
从GitHub或SourceForge网站下载最新的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终端中输入以下代码。
>>> import cv2 as cv
>>> print( cv.__version__ )
如果结果打印出来没有任何错误,恭喜!您已成功安装OpenCV-Python。
2.3 从源代码构建OpenCV
下载并安装Visual Studio和CMake。
下载必要的Python包并将其安装到默认位置。
- Python
- 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)
按如下方式填写字段(参见下图):
- 点击Browse Source...然后找到OpenCV文件夹。
- 点击Browse Build...然后找到我们创建的构建文件夹。
- 单击Configure。
- 它将打开一个新窗口来选择编译器。选择适当的编译器(此处为Visual Studio 11),然后单击“Finish”。
- 等待分析完成。
您将看到所有字段都标记为红色。点击 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中:
- 从fedora存储库中提供的预构建二进制文件安装。
- 从源代码编译。在本节中,我们将看到两者。
另一个重要的事情是需要额外的库。OpenCV-Python只需要 Numpy(除了其他依赖项,我们将在后面看到)。但在本教程中,我们也使用 Matplotlib 来实现一些简单而漂亮的绘图目的(与OpenCV相比,我感觉好多了)。Matplotlib是可选的,但强烈推荐。同样,我们还将看到 IPython,一个交互式Python终端,这也是强烈推荐的。
3.3 从预构建的二进制文件安装OpenCV-Python
以root用户身份在终端中使用以下命令安装所有软件包。
$ yum install numpy opencv*
打开Python IDLE(或IPython),在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 练习
- 在Fedora机器上从源代码编译OpenCV。
四、在Ubuntu中安装OpenCV-Python
4.1 目标
在本教程中,我们将学习如何在Ubuntu系统中安装OpenCV-Python。以下步骤针对Ubuntu 16.04和18.04(均为64位)进行了测试。
OpenCV-Python可以通过两种方式安装在Ubuntu中:
- 从Ubuntu存储库中提供的预构建二进制文件安装
- 从源代码编译。在本节中,我们将看到这两种。
另一个重要的事情是需要额外的库。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终端中输入以下代码。
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-devel 和 Numpy 用于构建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。
import cv2 as cv
print(cv.__version__)