Preface 前 言OpenCV 3是一种先进的计算机视觉库,可以用于各种图像和视频处理操作,通过OpenCV 3 能很容易地实现一些有前景且功能先进的应用(比如:人脸识别或目标跟踪等)。理解与计算机视觉相关的算法、模型以及OpenCV 3 API背后的基本概念,有助于开发现实世界中的各种应用程序(比如:安全和监视领域的工具)。
本书将从图像处理的基本操作出发,带你开启先进计算机视觉概念的探索之旅。计算机视觉是一个快速发展的学科,在现实生活中,它的应用增长得非常快,因此写作本书的目的是为了帮助计算机视觉领域的新手和想要了解全新的OpenCV 3.0.0的计算机视觉专家。
本书的主要内容第1章介绍如何在不同平台下安装基于Python的OpenCV,并给出一些常见问题的解决方法。
第2章介绍了OpenCV的I/O功能,并讨论与项目相关的概念,以及如何针对该项目进行面向对象设计。
第3章介绍一些图像变换方法,例如在图像中检测肤色、锐化图像、标记主体轮廓,以及使用线段检测器检测人行横道等。
第4章介绍如何利用深度摄像头的数据来识别前景和背景区域,这样就可以限制针对前景或背景的效果。
第5章介绍一些OpenCV的人脸检测功能和相关的数据文件,这些文件定义了跟踪目标的特定类型。
第6章介绍如何用OpenCV来检测图像特征,并利用这些特征来匹配和搜索图像。
第7章介绍目标检测和目标识别的概念,这是计算机视觉中最常见的问题之一。
第8章对目标跟踪进行深入探讨,目标跟踪是对摄像机中的图像或视频中移动的物体进行定位的过程。
第9章介绍基于OpenCV的人工神经网络,并介绍其在现实生活中的应用。
阅读前的准备工作本书第1章会指导读者安装所有必要软件,你只需准备一台较新的计算机。另外,强烈推荐为计算机安装摄像头,但这并不是必备的。
本书的读者对象本书针对具有一定Python工作经验的程序员以及想要利用OpenCV库研究计算机视觉课题的读者。本书不要求读者具有计算机视觉或OpenCV经验,但要具有编程经验。
本书体例本书有很多用来区分不同信息的文本格式,下面给出一些这类格式的样例,并解释它们的含义。
代码块的格式如下:
为了提醒读者注意代码块中的特殊部分,会将相关行或相关项设置为粗体:
命令行的输入或输出的格式为:
注意:警告或重要注释以这样的形式出现。
提示:提示和技巧以这样的形式出现。
下载示例代码读者可登录华章网站(www.hzbook.com)本书页面,下载本书示例代码。
作者简介 Abut the AuthorsJoe Minichino 是Hoolux Medical从事计算机视觉的工程师,他利用业余时间开发了NoSQL数据库LokiJS。他也是重金属歌手/作曲家。他是一个充满激情的程序员,对编程语言和技术非常好奇,并一直在使用它们。在Hoolux,Joe领导了针对医疗行业的Android计算机视觉广告平台的开发。
他出生在意大利瓦雷泽市的Lombardy,并在那里长大,在米兰Universitá Statale受过哲学教育,最近11年Joe在爱尔兰的Cork度过,在这里他成为Cork技术研究所的一名计算机科学研究生。
我非常感谢我的合作伙伴Rowena,她总是鼓励我,也感谢两个小女儿给我灵感。非常感谢这本书的合作者和编辑,尤其是Joe Howse、Adrian Roesbrock、Brandon Castellano、OpenCV社区,以及Packt出版社中那些为本书付出劳动的人。
Joseph Howse 生活在加拿大。在冬天,他留着胡子,而他的四只猫留着厚皮毛。他喜欢每天给猫梳毛。有时猫还会抓他的胡子。
自2012年以来,他一直在为Packt出版社写作,他的著作包括《OpenCV for Secret Agents》《OpenCV Blueprints》《Android Application Programming with OpenCV 3》《OpenCV Computer Vision with Python》以及《Python Game Programming by Example》。
当他不写书或打理萌宠时,他会提供咨询和培训,并通过他的公司(Nummist Media公司(http://nummist.com))进行软件开发服务。
Abut the Reviewers 审校者简介Nandan Banerjee 拥有计算机科学学士学位和机器人工程硕士学位。他毕业后在三星电子工作。他在班加罗尔的研发中心工作了一年。为了参加DARPA机器人挑战,他还曾在位于Atlas的Boston Dynamics机器人公司的WPI-CMU团队工作过。目前他是iRobot公司的一名机器人软件工程师。他是一名嵌入式系统和机器人爱好者,主要喜欢计算机视觉和运动规划。他熟悉各种语言,包括C、C++、Python、Java和Delphi。他在工作中会用到ROS、OpenRAVE、OpenCV、PCL、OpenGL、CUDA和Android SDK。
我要感谢作者和出版商能出版这样精彩的书。
Tian Cao 在美国教堂山的北卡罗来纳州大学攻读计算机科学博士学位,并参与图像分析、计算机视觉和机器学习等项目。
我将这项工作献给我的父母和女友。
Brandon Castellano 来自加拿大的学生,在加拿大伦敦市西安大略大学攻读电气工程硕士学位。在2012年,他获得同专业的学士学位。他主要研究实时图像处理算法的并行处理实现和GPGPU/FPGA优化。Brandon也在Eagle Vision Systems公司工作过,他在这家公司主要专注于机器人应用中的实时图像处理。
虽然他使用OpenCV和C++超过5年了,但他在研究中一直提倡使用Python,因为Python开发速度快,可与复杂系统实现低级对接。他在GitHub上有开源项目,例如,PySceneDetect,这些项目大部分是用Python编写的。除了图像/视频处理,他还致力于实现三维展示,并提供软件工具来支持这样的开发。
他除了在他的网站(http://www.bcastell.com)上张贴技术文章和教程外,还参与各种开源和不开源的项目,他在GitHub上的用户名为Breakthrough(http://www.github.com/Breakthrough)。他是Super User和Stack Overflow社区的活跃成员(其名字仍是Breakthrough),可直接通过他的网站与他联系。
我要感谢过去几年所有的朋友和家人的耐心(尤其是我的父母Peter和Lori以及我的兄弟Mitchell),没有他们持续的爱和支持,我不可能取得这一切成就。
我还要特别感谢所有致力开源软件库的开发者,特别是OpenCV,这有助于将前沿的软件技术免费带给世界各地的软件开发者。也想感谢那些写文档、提交错误报告和写教程/书籍(尤其是这本书的作者!)的人们,你们的贡献对任何开源项目的成功至关重要,尤指像OpenCV这样复杂庞大的开源软件。
Haojian Jin 位于加拿大Sunnyvale雅虎实验室的软件工程师/研究员。他主要开发移动新设备上(或最少硬件更改)的新系统。为了创建当今不存在的事物,他花费了大量时间来研究信号处理、计算机视觉、机器学习和自然语言处理,并以有趣的方式来使用它们。可在http://shift-3.com/上找到更多关于他的信息。
Adrian Rosebrock 一位作家,也是http://www.pyimagesearch.com/的博主。他有马里兰大学计算机科学博士学位,侧重于计算机视觉和机器学习的研究。
他曾在癌症研究所从事通过乳腺图像来自动预测乳腺癌的危险因素的研究。他还写了《Practical Python and OpenCV》一书(http://pyimg.co/x7ed5),这本书介绍如何利用Python和OpenCV来构建现实世界中的计算机视觉应用。
About the Translators 译者简介刘波 博士,重庆工商大学计算机科学与信息工程学院教师,主要从事机器学习理论、计算机视觉和最优化技术研究,同时对Hadoop和Spark平台上的大数据分析感兴趣,也对Linux编程和Oracle数据库感兴趣。
苗贝贝 硕士,北京工商大学计算机与信息工程学院研究生,主要从事机器学习理论、时间序列动力学特征分析及应用的研究,对基于Python的计算机视觉分析有浓厚的兴趣。
史斌 2015年本科毕业于电子科技大学计算机学院,目前就职于成都知数科技有限公司,主要从事数据爬取、数据处理、平台运维等工作,熟悉Python、Linux shell,同时热爱计算机视觉编程,熟悉Python下的OpenCV编程。