计算机视觉是利用计算机模拟人类视觉,利用镜头和计算机代替人眼,使计算机拥有人类视觉的能力,对图像和视频中的目标进行分割、分类、识别、跟踪、判别、决策等。计算机视觉是一门交叉学科,涉及的领域包括计算机科学(图形、算法、理论、系统、体系结构)、数学(机器学习、信息检索)、工程学(机器人、语音、自然语言处理、图像处理)、物理学(光学)、生物学(神经科学)和心理学(认知科学)等。计算机视觉的目标是对环境的表达和理解,核心问题是研究如何对输入的图像信息进行组织以及如何对物体和场景进行识别,进而对图像内容进行解释。常见的应用领域包括图像检索和分类、人脸检测和识别、物体跟踪、视频监控、生物识别技术、游戏和控制等。人工神经网络和深度学习的最新研究进展极大地推动了计算机视觉技术的发展。
本书通过大量编程实践案例,全面系统地介绍了计算机视觉及其相关领域的核心内容。全书共10章,包括基于Python 3在各种平台上安装OpenCV 4、文件、OpenCV的I/O功能、摄像头及图形用户界面处理、基于OpenCV的图像处理、深度估计与分割、人脸检测和识别、利用图像描述符进行图像检索和搜索、构建自定义物体检测器、物体跟踪、摄像头模型和增强现实,以及基于OpenCV的神经网络导论等内容。
为了便于读者学习,作者在GitHub上提供了相关案例的完整源代码,供读者下载使用。通过书中提供的案例代码,读者可以快速熟悉和掌握计算机视觉领域的相关知识。本书既适合那些想要从事计算机视觉及其相关领域研发的初学者阅读,也适合那些致力于计算机视觉研究、希望扩展和更新技能的高阶读者阅读。但是对于初次接触计算机视觉及其相关领域的人员来说,在阅读本书前,建议先阅读一下OpenCV 4和Python 3等编程书籍,或者事先学习一下有关OpenCV 4和Python 3编程的在线教程。
本书由重庆邮电大学教师刘冰博士和高级工程师高博历时四个多月的时间翻译完成,同时本书获得了重庆邮电大学博士启动基金(E012A2020215)的支持。为了能够准确地翻译本书,译者查阅了大量有关OpenCV 4、Python 3以及计算机视觉等方面的中外文资料。但因水平有限,译文中难免存在不当之处,恳请读者批评指正。
感谢机械工业出版社华章公司的编辑们,是他们的严格要求,才使本书得以高质量出版。
刘冰
liubing@cqupt.edu.cn
2021年3月
本书内容是关于OpenCV的Python绑定的。从经典技术到先进技术,从几何知识到机器学习,读者将学习大量的技术和算法。在构建良好应用程序的过程中,这些内容都有助于解决实际的计算机视觉问题。在使用OpenCV 4和Python 3的过程中,我们所采用的方法既适用于计算机视觉新手,又适用于希望扩展和更新技能的专家。
首先,我们将介绍OpenCV 4,并解释如何基于Python 3在各种平台上安装、设置OpenCV 4。接着将介绍如何执行读取、写入、操纵和显示静态图像、视频以及摄像头回传信号等基本操作。还将介绍图像处理和视频分析,以及深度估计和分割,通过构建简单的GUI应用程序,让读者获得实践技能。接下来,将处理两类主流问题:人脸检测和人脸识别。
随着学习的深入,我们将探索物体分类和机器学习的概念,使读者能够创建和使用物体检测器及分类器,甚至跟踪电影或者摄像头回传信号中的物体。随后我们将工作扩展到3D跟踪和增强现实。最后,在开发识别手写数字的应用程序并对人的性别和年龄进行分类时,我们将学习人工神经网络(Artificial Neural Network,ANN)和深度神经网络(Deep Neural Network,DNN)。
读完本书,你将获得正确的知识和技能,以着手实际的计算机视觉项目。
本书是为那些对计算机视觉、机器学习以及OpenCV在真实场景中的应用感兴趣的读者编写的,无论是计算机视觉新手,还是那些希望跟进OpenCV 4和Python 3的专家,都非常适合阅读本书。读者应该熟悉基本的Python编程知识,但是不需要具备图像处理、计算机视觉或机器学习的先验知识。
第1章解释如何基于Python 3在各种平台上安装OpenCV 4。本章还提供了常见问题的处理步骤。
第2章介绍OpenCV的I/O功能。本章还讨论了GUI项目的面向对象设计,我们将在其他章节中对该GUI项目进一步开发。
第3章介绍一些转换图像所需的技术,如颜色处理、图像锐化、物体轮廓标记以及几何形状检测。
第4章展示如何使用来自深度摄像头的数据识别前景和背景区域,以将效果限制在前景或背景。
第5章介绍基于OpenCV的一些人脸检测和识别功能,以及定义特定类型的可检测物体的数据文件。
第6章展示如何在OpenCV的帮助下描述图像的特征,以及如何利用特征进行图像匹配和搜索。
第7章结合计算机视觉和机器学习算法来定位和分类图像中的物体。本章还展示了如何使用OpenCV实现这种算法组合。
第8章演示跟踪和预测视频或实时摄像头中人和物体运动的方法。
第9章将构建一个增强现实应用程序,使用摄像头、物体和运动的信息,实时地将3D图形叠加到跟踪的物体上。
第10章介绍OpenCV中的人工神经网络和深度神经网络,并说明这些内容在实际应用中的用法。
附录描述颜色曲线的概念以及利用SciPy对其进行的实现。
读者至少要熟练掌握Python编程语言的基本知识。推荐使用Windows、macOS或Linux开发机。你可以参考第1章中关于安装OpenCV 4、Python 3以及其他依赖项的说明。
本书采用实践教学方法,包括77个示例脚本以及示例数据。阅读本书的时候,这些示例将有助于强化概念。
本书的代码是在BSD 3条款开放源码许可下发布的,这与OpenCV本身所使用的许可相同。鼓励读者使用、修改、改进示例程序,甚至发布对这些示例程序的更改。
本书的示例代码文件及截图、样图和视频文件,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
本书的代码包也托管在GitHub的https://github.com/PackPublishing/Learning-opencv-4-Computer-Vision-with-Python-Third-Edition处。如果代码有更新,其上代码也会随之更新。
文本中的代码体:指示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、用户输入和Twitter句柄。例如“OpenCV提供了VideoCapture和VideoWriter类,它们支持各种视频文件格式”。
代码块示例:
代码块中需关注的部分加粗表示:
通常,命令行输入或输出这样表示:
对于Windows系统,命令行输入或输出这样表示:
表示警告或重要注意点。
表示提示和技巧。
约瑟夫·豪斯 (Joseph Howse)和他的四只猫生活在加拿大的一个渔村。一般的猫喜欢吃鱼,可是这四只猫更喜欢吃鸡肉。
约瑟夫通过他的公司Nummist Media提供计算机视觉专业知识。他的著作包括Packt出版社出版的OpenCV 4 for Secret Agents、Learning OpenCV 4 Computer Vision with Python 3、OpenCV 3 Blueprints、Android Application Programming with OpenCV 3、iOS Application Development with OpenCV 3以及Python Game Programming by Example。
感谢所有为本书三个版本做出贡献的人:读者、合著者乔·米尼奇诺,以及编辑、技术审校者和营销团队的成员。尤其感谢我的家人对我的工作的支持,因此我要把这本书献给我的家人。
乔·米尼奇诺 (Joe Minichino)是Teamwork研发实验室的一名工程师。他是一名富有激情的程序员,对编程语言和技术充满好奇,并不断地进行实验。他在意大利伦巴第的瓦雷兹出生和长大,有着哲学方面的人文背景(米兰大学,Milan's UniversitàStatale)。自2004年以来,乔生活在爱尔兰的科克郡。他毕业于科克理工学院的计算机科学专业。