前言
计算机视觉是目前最热门的研究领域之一,OpenCV-Python集成了OpenCV C++API和Python的最佳特性,成为计算机视觉领域内极具影响力和实用性的工具。
近年来,我深耕计算机视觉领域,从事课程研发工作,在该领域,尤其是OpenCV-Python方面积累了一些经验,因此经常会收到与该领域相关的咨询,内容涵盖图像处理的基础知识、OpenCV工具的使用、深度学习的具体应用等多个方面。为了更好地把积累的知识以图文的形式分享给大家,我对该领域的知识点进行了系统的整理,编写了本书。希望本书的内容能够为大家在计算机视觉方面的学习提供帮助。
本书的主要内容
本书对计算机视觉涉及的知识点进行了全面、系统、深入的梳理,旨在帮助读者快速掌握该领域的核心知识点。全书包含5个部分,40余个计算机视觉经典案例,主要内容如下。
第1部分 基础知识导读篇
本部分对计算机视觉领域的基础内容进行了系统的梳理,以帮助初学者快速入门。本部分主要包含以下三方面内容:
● 数字图像基础(第1章)
● Python基础(第2章)
● OpenCV基础(第3章)
第2部分 基础案例篇
本部分主要为使用OpenCV-Python实现图像处理的经典案例,主要包含:
● 图像加密与解密(第4章)
● 数字水印(第5章)
● 物体计数(第6章)
● 缺陷检测(第7章)
● 手势识别(第8章)
● 答题卡识别(第9章)
● 隐身术(第10章)
● 以图搜图(第11章)
● 手写数字识别(第12章)
● 车牌识别(第13章)
● 指纹识别(第14章)
上述案例采用传统的图像处理方法解决问题,以帮助读者理解如下知识点:
● 图像预处理方法(阈值处理、形态学操作、图像边缘检测、滤波处理)
● 色彩空间处理
● 逻辑运算(按位与、按位异或)
● ROI(感兴趣区域)
● 计算图像轮廓
● 特征值提取、比对
● 距离计算
第3部分 机器学习篇
本部分主要对机器学习基础知识及K近邻模块、SVM算法、K均值聚类模块进行了具体介绍。在上述基础上,使用OpenCV机器学习模块实现了下述案例:
● KNN实现字符(手写数字、英文字母)识别(第16章)
● 求解数独图像(第17章)
● SVM数字识别(第18章)
● 行人检测(第19章)
● K均值聚类实现艺术画(第20章)
第4部分 深度学习篇
本部分介绍了深度学习基础知识、卷积神经网络基础知识、深度学习案例。在第24章介绍了使用DNN模块实现计算机视觉的经典案例,主要有:
● 图像分类
● 目标检测(YOLO算法、SSD算法)
● 语义分割
● 实例分割
● 风格迁移
● 姿势识别
第5部分 人脸识别篇
本部分对人脸识别的相关基础、dlib库、人脸识别的典型应用进行了深入介绍。主要案例如下:
● 人脸检测(第25章)
● 人脸识别(第26章)
● 勾勒五官轮廓(第27章)
● 人脸对齐(第27章)
● 表情识别(第28章)
● 驾驶员疲劳检测(第28章)
● 易容术(第28章)
● 年龄和性别识别(第28章)
本书的主要特点
本书在内容的安排、组织、设计上遵循了如下思路。
1.适合入门
第1部分对计算机视觉的基础知识进行了全面的梳理,主要包括数字图像基础、Python基础、OpenCV基础。重点对计算机视觉中用到的基础理论、算法、图像处理,Python程序设计基础语法,OpenCV核心函数进行了介绍。该部分内容能够帮助没有计算机视觉基础的读者快速入门,也能够帮助有一定计算机视觉基础的读者对核心知识点进行快速梳理。
2.以案例为载体
按照知识点安排的教材的特点在于“相互独立,完全穷尽”(Mutually Exclusive Collectively Exhaustive,MECE),能够保证介绍的知识点“不重叠,不遗漏”。但是,跟着教材学习可能会存在如下问题:“了解了每一个知识点,但在遇到问题时感觉无从下手,不知道该运用哪些知识点来解决当前问题。”
知识点是一个个小石子,解决问题的思路是能够把许多石子串起来的绳子。绳子可以赋予石子更大的意义和价值,解决问题能够让知识点得以运用。
本书通过案例来介绍相关知识点,尽量避免将案例作为一个孤立的问题来看待,而是更多地考虑知识点之间的衔接、组合、应用场景等。例如,本书采用了多种不同的方式来实现手写数字识别,以帮助大家更好地从不同角度理解和分析问题。本书从案例实战的角度展开,将案例作为一根线,把所有知识点串起来,以帮助读者理解知识点间的关系并将它们组合运用,提高读者对知识点的理解和运用能力。
3.轻量级实现
尽量以简单明了的方式实现一个问题,以更好地帮读者搞清问题的核心和算法。用最简化的方式实现最小可用系统(Minimum Viable Product,MVP),用最低的成本和代价快速验证和迭代一个算法,这样更有利于理解问题、解决问题。在成本最低的前提下,利用现有的资源,以最快的速度行动起来才是最关键的。所以,本书尽可能简化每一个案例,尽量将代码控制在100行左右。希望通过这样的设计,让读者更好地关注算法核心。
4.专注算法
抽象可以帮助读者屏蔽无关细节,让读者能够专注于工具的使用,极大地提高工作效率。OpenCV及很多其他库提供的函数都是封装好的,只需要直接把输入传递给函数,函数就能够返回需要的结果。因此,本书没有对函数做过多介绍,而是将重点放在了实现案例所使用的核心算法上。
5.图解
一图胜千言。在描述关系、流程等一些相对比较复杂的知识点时,单纯使用语言描述,读者一时可能会难以理解。在面对复杂的知识点时,有经验的学习者会根据已有知识点绘制一幅与该知识点有关的图,从而进一步理解该知识点。因为图像能够更加清晰、直观、细致地将知识点的全局、结构、关系、流程、脉络等信息体现出来。本书配有大量精心制作的图表,希望能够更好地帮助读者理解相关知识点。
6.案例全面
本书涉及的40余个案例都是相关领域中比较典型的,涵盖了计算机视觉领域的核心应用和关键知识点。案例主要包括四个方面。
● 基础部分:图像安全(图像加密、图像关键部位打码、隐身术)、图像识别(答题卡识别、手势识别、车牌识别、指纹识别、手写数字识别)、物体计数、图像检索、缺陷检测等。
● 机器学习:KNN实现字符(手写数字、英文字母)识别、数独图像求解(KNN)、SVM手写数字识别、行人检测、艺术画(K均值聚类)等。
● 深度学习:图像分类、目标检测(YOLO算法、SSD算法)、语义分割、实例分割、风格迁移、姿势识别等。
● 人脸识别相关:人脸检测、人脸识别、勾勒五官轮廓、人脸对齐、表情识别、驾驶员疲劳检测、易容术、性别和年龄识别等。
感谢
首先,感谢我的导师高铁杠教授,感谢高教授带我走进了计算机视觉这一领域,以及一直以来给我的帮助。
感谢OpenCV开源库的所有贡献者让OpenCV变得更好,让计算机视觉领域更加精彩。
感谢本书的责任编辑符隆美老师,她积极促成本书的出版,修正了书中的技术性错误,并对本书内容进行了润色。感谢本书的封面设计老师为本书设计了精美的封面。感谢为本书出版而付出辛苦工作的每一位老师。
感谢合作单位天津拨云咨询服务有限公司为本书提供资源支持。
本书出版受天津职业技术师范大学教材支持项目(项目编号:XJJW1970)支持。
感谢家人的爱,我爱你们。
互动方式
限于本人水平,书中存在很多不足之处,欢迎大家提出宝贵的意见和建议,也非常欢迎大家跟我交流关于OpenCV的各种问题,我的邮箱是lilizong@gmail.com。
另外,大家也可以关注我的微信公众号“计算机视觉之光”(微信号cvlight)获取关于本书的配套资源。
李立宗
2022年5月27日于天津