• 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终端中输入以下代码。

    >>> 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. 等待分析完成。

    alt text

    alt text

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

    alt text

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

    alt text

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

    alt text

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

    alt text

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

    alt text

    最后点击 Generate 按钮。

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

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

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

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

    alt text

    打开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终端中输入以下代码。

    >>> 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 ] [-D ] ..
    

    您可以指定任意多个标志,但每个标志前面都应该有-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终端中输入以下代码。

    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。

    import cv2 as cv
    print(cv.__version__)
    
  • 相关阅读:
    用于物体识别和跟踪的下游任务自监督学习-2-背景
    【洛谷 P1478】陶陶摘苹果(升级版)题解(多重集合+贪心算法)
    day1 计算机硬件基础
    AMS的启动
    配置oh my zsh的命令自动补全
    基于双级阈值及过零率的语音激活检测(VAD)
    flink&kafka-connector消费 protobuf格式数据
    C++ 单例模式的两种实现(包括一种饿汉式和两种懒汉式)
    物联网边缘网关
    C语言数组
  • 原文地址:https://www.cnblogs.com/jssst/p/18213733