close
当前位置: 物联网在线 > 技术文库 >

给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

本篇是前面两篇教程:

给深度学习入门者的Python快速教程 - 基础篇

给深度学习入门者的Python快速教程 - numpy和Matplotlib篇

的番外篇,因为严格来说不是在讲Python而是讲在Python下使用OpenCV。本篇将介绍和深度学习数据处理阶段最相关的基础使用,并完成4个有趣实用的小例子:
- 延时摄影小程序
- 视频中截屏采样的小程序
- 图片数据增加(data augmentation)的小工具
- 物体检测框标注小工具

其中后两个例子的代码可以在下面地址直接下载:
frombeijingwithlove/dlcv_for_beginners

6.1 OpenCV简介

OpenCV是计算机视觉领域应用最广泛的开源工具包,基于C/C++,支持Linux/Windows/MacOS/Android/iOS,并提供了Python,Matlab和Java等语言的接口,因为其丰富的接口,优秀的性能和商业友好的使用许可,不管是学术界还是业界中都非常受欢迎。OpenCV最早源于Intel公司1998年的一个研究项目,当时在Intel从事计算机视觉的工程师盖瑞·布拉德斯基(Gary Bradski)访问一些大学和研究组时发现学生之间实现计算机视觉算法用的都是各自实验室里的内部代码或者库,这样新来实验室的学生就能基于前人写的基本函数快速上手进行研究。于是OpenCV旨在提供一个用于计算机视觉的科研和商业应用的高性能通用库。 第一个alpha版本的OpenCV于2000年的CVPR上发布,在接下来的5年里,又陆续发布了5个beta版本,2006年发布了第一个正式版。2009年随着盖瑞加入了Willow Garage,OpenCV从Willow Garage得到了积极的支持,并发布了1.1版。2010年OpenCV发布了2.0版本,添加了非常完备的C++接口,从2.0开始的版本非常用户非常庞大,至今仍在维护和更新。2015年OpenCV 3正式发布,除了架构的调整,还加入了更多算法,更多性能的优化和更加简洁的API,另外也加强了对GPU的支持,现在已经在许多研究机构和商业公司中应用开来。

6.1.1 OpenCV的结构

和Python一样,当前的OpenCV也有两个大版本,OpenCV2和OpenCV3。相比OpenCV2,OpenCV3提供了更强的功能和更多方便的特性。不过考虑到和深度学习框架的兼容性,以及上手安装的难度,这部分先以2为主进行介绍。

根据功能和需求的不同,OpenCV中的函数接口大体可以分为如下部分:

- core:核心模块,主要包含了OpenCV中最基本的结构(矩阵,点线和形状等),以及相关的基础运算/操作。

- imgproc:图像处理模块,包含和图像相关的基础功能(滤波,梯度,改变大小等),以及一些衍生的高级功能(图像分割,直方图,形态分析和边缘/直线提取等)。

- highgui:提供了用户界面和文件读取的基本函数,比如图像显示窗口的生成和控制,图像/视频文件的IO等。

如果不考虑视频应用,以上三个就是最核心和常用的模块了。针对视频和一些特别的视觉应用,OpenCV也提供了强劲的支持:

- video:用于视频分析的常用功能,比如光流法(Optical Flow)和目标跟踪等。

- calib3d:三维重建,立体视觉和相机标定等的相关功能。

- features2d:二维特征相关的功能,主要是一些不受专利保护的,商业友好的特征点检测和匹配等功能,比如ORB特征。

- object:目标检测模块,包含级联分类和Latent SVM

- ml:机器学习算法模块,包含一些视觉中最常用的传统机器学习算法。

- flann:最近邻算法库,Fast Library for Approximate Nearest Neighbors,用于在多维空间进行聚类和检索,经常和关键点匹配搭配使用。

- gpu:包含了一些gpu加速的接口,底层的加速是CUDA实现。

- photo:计算摄像学(Computational Photography)相关的接口,当然这只是个名字,其实只有图像修复和降噪而已。

- stitching:图像拼接模块,有了它可以自己生成全景照片。

- nonfree:受到专利保护的一些算法,其实就是SIFT和SURF。

- contrib:一些实验性质的算法,考虑在未来版本中加入的。

- legacy:字面是遗产,意思就是废弃的一些接口,保留是考虑到向下兼容。

- ocl:利用OpenCL并行加速的一些接口。

- superres:超分辨率模块,其实就是BTV-L1(Biliteral Total Variation – L1 regularization)算法

- viz:基础的3D渲染模块,其实底层就是著名的3D工具包VTK(Visualization Toolkit)。

从使用的角度来看,和OpenCV2相比,OpenCV3的主要变化是更多的功能和更细化的模块划分。

6.1.2 安装和使用OpenCV

作为最流行的视觉包,在Linux中安装OpenCV是非常方便的,大多数Linux的发行版都支持包管理器的安装,比如在Ubuntu 16.04 LTS中,只需要在终端中输入:

>> sudo apt install libopencv-dev python-opencv

当然也可以通过官网下载源码编译安装,第一步先安装各种依赖:

>> sudo apt install build-essential

>> sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

>> sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

然后找一个clone压缩包的文件夹,把源码拿下来:
>> git clone opencv/opencv

然后进入OpenCV文件夹:

>> mkdir release

>> cd release

>> cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=http://xilinx.eetrend.com/usr/local

准备完毕,直接make并安装:

>> make

>> sudo make install

Windows下的安装也很简单,直接去OpenCV官网下载:

DOWNLOADS | OpenCV


(责任编辑:ioter)

用户喜欢...

主流机器学习算法简介与其优缺点分析

机器学习算法的分类是棘手的,有几种合理的分类,他们可以分为生成/识别,参数/非参数,监督/无监督等。 例如,Scikit-Learn的文档页面通过学习机制对算法进行分组。这产生类别如:1,广...


盘点·GitHub最著名的20个Python机器学习项目

开源是技术创新和快速发展的核心。这篇文章向你展示Python机器学习开源项目以及在分析过程中发现的非常有趣的见解和趋势。 我们分析了GitHub上的前20名Python机器学习项目,发现scikit-Lear...


【原创深度】WISP为农村地区提供高速互联网接入

互联网为人们的生活提供了便利。在城市中,人们可以通过电缆或光纤接入互联网,轻松获得超百兆带宽的下载速度。然而,这轻而易举就能够得到的资源,在很多农村地区,是无论付出什么...


深度解析FPGA四大设计要点

FPGA的用处比我们平时想象的用处更广泛,原因在于其中集成的模块种类更多,而不仅仅是原来的简单逻辑单元(LE)。早期的FPGA相对比较简单,所有的功能单元仅仅由管脚、内部buffer、LE、RAM构...


机器学习必知的15大框架

摘要: 不管你是一个研究人员,还是开发者,亦或是管理者,想要使用机器学习,需要使用正确的工具来实现。本文介绍了当前最流行15个机器学习框架。 机器学习工程师是开发产品和构建...


神经网络入门指南

人工神经网络(ANN)是一种从信息处理角度对人脑神经元网络进行抽象从而建立的某种简单模型,按不同的连接方式组成不同的网络。其在语音识别、计算机视觉和文本处理等方面取得的突破...


机器学习算法选用指南

在从事数据科学工作的时候,经常会遇到为具体问题选择最合适算法的问题。虽然有很多有关机器学习算法的文章详细介绍了相关的算法,但要做出最合适的选择依然非常困难。 在这篇文章...


机器学习:朴素贝叶斯--python

今天介绍机器学习中一种基于概率的常见的分类方法,朴素贝叶斯,之前介绍的KNN, decision tree 等方法是一种 hard decision,因为这些分类器的输出只有0 或者 1,朴素贝叶斯方法输出的是某一类...


对于机器学习,到底该选择哪种编程语言

开发者到底应该学习哪种编程语言才能获得机器学习或数据科学这类工作呢?这是一个非常重要的问题。我们在许多论坛上都有讨论过。现在,我可以提供我自己的答案并解释原因,但我们先...


初学者必看!深度学习入门指南

前言 机器学习技术为现代社会的许多领域提供了强大的技术支持:从网络搜索到社交网络的内容过滤,再到电子商务网站的产品推荐。机器学习技术正越来越多的出现在消费级产品上,比如...