编辑推荐

近年来,随着计算机处理能力和性能的显著提升,计算机视觉领域也得到极大推动,越来越多的算法被引入来更有效地执行计算机视觉任务。《计算机视觉算法:基于OpenCV的计算机应用开发》从基础开始,循序渐进,通过实例介绍每个算法,适合所有对计算机视觉领域感兴趣并希望在实际工作中使用计算机视觉算法的人入门。

首先,你将了解计算机视觉开发所需的工具及其安装和配置,接着你将探索OpenCV框架及其强大的库和函数集。从*简单的图像修改、滤镜和变换开始,你将逐步掌握各种算法知识,直到能执行更复杂的任务,例如,使用深度学习算法进行实时对象检测。

计算机视觉算法:基于OpenCV的计算机应用开发》涵盖以下内容:
·机器学习和人工智能算法。
·读取、写入以及处理图像和视频。
·执行数学、矩阵和其他类型的图像数据操作。
·从反向投影图像创建和使用直方图。
·检测运动、提取前景和追踪对象。
·使用一组特征检测器算法提取关键点。
·开发级联分类器并使用它们,以及训练和测试分类器。
·使用TensorFlow来检测多个对象。

内容简介

计算机视觉算法:基于OpenCV的计算机应用开发》首先介绍计算机视觉开发所需的工具及其安装和配置,接着探索OpenCV框架及其强大的库和函数集。从*简单的图像修改、滤镜和变换开始,读者将逐步掌握各种算法知识,直到能执行更复杂的任务,例如使用深度学习算法进行实时对象检测等。《计算机视觉算法:基于OpenCV的计算机应用开发》适合所有对计算机视觉感兴趣并希望在实际工作中使用计算机视觉算法的读者。

作者简介

AminAhmadiTazehkandi是一位伊朗作家、开发工程师和计算机视觉专家。他在伊朗完成了计算机软件工程学习,并为世界各地的众多软件和工业公司工作。

目录

目  录
Hands-OnAlgorithmsforComputerVision
译者序
前言
关于作者
关于审稿人
第1章 计算机视觉概述1
1.1 技术要求1
1.2 理解计算机视觉1
1.3 理解计算机图像3
1.3.1 色彩空间5
1.3.2 输入、处理和输出7
1.4 计算机视觉框架和软件库8
1.5 总结9
1.6 习题9
第2章 OpenCV入门11
2.1 技术要求12
2.2 OpenCV介绍12
2.3 OpenCV的下载、编译和安装14
2.4 在C++或Python项目中使用OpenCV17
2.5 理解Mat类19
2.5.1 创建一个Mat对象20
2.5.2 删除一个Mat对象23
2.5.3 访问像素24
2.6 图像读写27
2.7 视频文件读写29
2.7.1 使用摄像头31
2.7.2 使用RTSP和网络流媒体32
2.8 Mat类家族32
2.9 总结32
2.10 习题33
2.11 补充阅读33
第3章 数组和矩阵操作34
3.1 技术要求34
3.2 Mat类中的操作35
3.2.1 克隆矩阵35
3.2.2 计算叉积35
3.2.3 提取对角线36
3.2.4 计算点积36
3.2.5 学习单位矩阵37
3.2.6 矩阵求逆37
3.2.7 元素级矩阵乘法37
3.2.8 全一和全零矩阵37
3.2.9 矩阵转置38
3.2.10 重塑Mat对象39
3.3 元素级矩阵操作39
3.3.1 基本操作39
3.3.2 按位逻辑操作43
3.3.3 比较操作47
3.3.4 数学操作48
3.4 矩阵和数组级操作49
3.4.1 为外推法生成边界50
3.4.2 翻转(镜像)和旋转图像51
3.4.3 使用图像通道52
3.4.4 数学函数54
3.4.5 搜索和定位功能58
3.5 总结60
3.6 习题61
第4章 绘图、滤镜和变换62
4.1 技术要求62
4.2 在图像上绘图63
4.2.1 在图像上打印文字63
4.2.2 在图像上绘制形状66
4.3 图像滤镜72
4.3.1 模糊/平滑滤镜72
4.3.2 形态滤镜76
4.3.3 基于导数的滤镜79
4.3.4 任意滤镜80
4.4 图像变换81
4.4.1 阈值算法81
4.4.2 色彩空间和类型转换83
4.5 几何变换84
4.6 使用色彩表86
4.7 总结88
4.8 习题88
第5章 反向投影和直方图89
5.1 技术要求89
5.2 理解直方图90
5.3 直方图反向投影95
5.4 直方图比较103
5.5 直方图均衡105
5.6 总结106
5.7 习题107
5.8 补充阅读107
第6章 视频分析——运动检测和
追踪108
6.1 技术要求108
6.2 视频处理109
6.3 理解均值偏移算法112
6.4 使用连续自适应均值偏移算法119
6.5 使用卡尔曼滤波器进行运动追踪和降噪122
6.6 如何提取背景和前景129
6.7 总结132
6.8 习题132
第7章 对象检测——特征和描述符133
7.1 技术要求133
7.2 用于对象检测的模板匹配134
7.3 检测角点和边缘137
7.3.1 学习Harris角点检测算法137
7.3.2 边缘检测算法143
7.4 轮廓计算和分析147
7.5 特征检测、描述和匹配152
7.6 总结158
7.7 习题158
第8章 机器学习与计算机视觉160
8.1 技术要求160
8.2 支持向量机161
8.3 用人工神经网络训练模型169
8.4 级联分类算法171
8.4.1 使用级联分类器进行对象检测171
8.4.2 训练级联分类器174
8.5 使用深度学习模型180
8.6 总结184
8.7 习题184
习题答案185

前言/序言

  译者序
  Hands-OnAlgorithmsforComputerVision
  美国东部时间2012年6月25日,当《纽约时报》作家JimWilson写下《HowManyComputerstoIdentifyaCat?16,000》这篇报道时,应该只有很少人能预料到:这个现象及其背后的技术,将如此迅速而深刻地为一个时代的变革拉开序幕。当时的我,在准备赴美读博时也并未把机器学习作为可能的研究方向。两年后,博士肄业加入谷歌的我发现,无论愿意与否,计算机专业的热点已转到了人工智能和机器学习(尤其是深度学习),想要将自己置身于这浪潮之外会越来越难:不管是什么方向的技术峰会、专业论坛,人工智能和机器学习都是人们关心的方向,也是嘉宾和讲师必然会涉及的话题。
  在机器学习的诸多领域中,计算机视觉是目前发展最成熟的方向之一,也是许多人接触机器学习算法的起点。深度学习之所以火起来,不正是始于吴恩达博士在谷歌大脑用深度学习算法让机器学会识别猫吗(在薛定谔的猫之后,猫又一次为科学发展做出了贡献)?同样,让机器更聪明地看与听,仍将是未来几年人工智能的主要课题之一。而随着国家AI+战略的推进,未来不只是计算机软硬件以及互联网行业的从业者会站在这波浪潮之巅,过去相对传统的行业也将被卷入其中。以在线教育为例:作业帮、一起作业网等能够拍照搜题;叮咚课堂、aiKID和葡萄英语能够进行简单的语音识别,用AI老师的方式跟孩子互动;而在51Talk,我们用人脸识别、表情识别来进行课堂质量监督并根据孩子的表现调整教学内容。在线教育只是冰山一角,在当下已经有成百上千的应用场景正在被AI深度影响甚至颠覆。
  与其他计算机领域一样,理解计算机视觉算法需要坚实的数学基础。此外,读者最好还具备图像处理、信号与系统、计算机图形学等学科的背景及开发经验。开发者还要掌握各种基础算法和数据结构,以应对各种开发需求。当然,在移动设备成为主要个人计算平台的今天,针对不同硬件条件下图像和视频的采集、编解码、传输,以及不同处理器和片上系统(SystemonChip,SoC)的优化与测试更是算法落地必不可少的技能。没有足够的理论知识和工程经验的初学者面对如此浩瀚繁多且异常艰深的内容将无从下手。
  然而,《计算机视觉算法:基于OpenCV的计算机应用开发》和许多计算机视觉书籍的最大区别就在于隐藏了很多复杂的细节,绕开了相关算法的数学证明和实现,利用计算机视觉领域大名鼎鼎的OpenCV(OpenSourceComputerVisionlibrary),让读者自己动手,实现一个个具体且实用的例子。这样的好处显而易见,读者在完成这些实例后能熟悉计算机视觉算法开发的整体流程,逐步树立自信。相关算法的细节可以通过研究OpenCV源代码,结合阅读相关书籍、论文来逐步补充学习。在译者看来,这是掌握一门技术的最佳路径。
  《计算机视觉算法:基于OpenCV的计算机应用开发》特别适合计算机背景的学生和开发者学习阅读。《计算机视觉算法:基于OpenCV的计算机应用开发》在简单介绍了计算机视觉的基本概念和OpenCV的使用方法后,按照计算机视觉项目开发的难易程度,从基础的图像和视频的读写操作,到简单的图像矩阵运算,再到基础的图像处理、视频分析,最后到对象检测与机器学习分类算法,抽丝剥茧层层递进。《计算机视觉算法:基于OpenCV的计算机应用开发》还配备了完整的示例代码,有助于读者自主学习并验证各种算法的效果。同时,得益于OpenCV提供的工具、函数和类,这些示例代码都很轻量,非常易于理解。推荐读者在阅读《计算机视觉算法:基于OpenCV的计算机应用开发》时参考OpenCV的官方文档和其他图像处理、机器学习算法类的书籍,这样将会事半功倍。
  译者在《计算机视觉算法:基于OpenCV的计算机应用开发》的翻译过程中,得到了北京大生在线科技有限公司(51Talk)的同事和华章公司编辑的大力协助,在此由衷感谢。
  译者
  前  言
  Hands-OnAlgorithmsforComputerVision
  我们正生活在一个激动人心的时代。每天你都能发现全新的软件或电子设备,它们为你完成特定工作、提供娱乐、联系亲朋好友、以图片或视频的形式记录你的生活等。不管是你口袋里巴掌大的智能手机、手腕上小巧的智能手表,还是你联网的智能汽车,大部分软件和设备的出现都归功于处理器技术的巨大发展。更便宜、更快速的处理器能运行优秀的软件库和软件框架,使得一些过去被认为只能由人类感知器官(例如眼睛和耳朵)来完成的任务,可以通过数学算法和计算机技术高效地实现。
  计算机视觉是计算机科学的一个分支领域,近年来,随着硬件和软件技术的发展,这个领域有了革命性的进步。反过来,计算机视觉也同样深刻地影响了硬件和软件的发展。如今,从数码相机拍照这样简单的任务到理解自动驾驶汽车的环境从而躲避车祸这样复杂的任务,计算机视觉被应用到各个方面。它可以在视频录像中把人脸换成兔子,也可以在显微镜影像中检测癌变细胞和组织从而挽救人的生命。说到计算机视觉应用的可能性,可以说是没有限制,尤其考虑到软件库和软件框架的巨大进步,公司和开发者可以把他们无穷无尽的想法变成现实。
  在过去的几年里,OpenCV(全称是OpenSourceComputerVisionlibrary,开源计算机视觉库)已经发展为一套完整的计算机视觉开发工具。它涵盖了几乎所有你能想到的解决计算机视觉问题所需的功能:从最基本的图像操作,如缩放和滤镜,到可用于快速准确地检测物体的机器学习算法训练模型。它也提供了开发计算机视觉应用需要的几乎所有模块,并支持一些最流行的编程语言,如C++和Python。你甚至能找到.NET框架的接口。OpenCV能在所有主流操作系统上运行,包括移动系统和桌面平台。
  《计算机视觉算法:基于OpenCV的计算机应用开发》的目标是用实际的例子和项目教会读者如何使用OpenCV来进行计算机视觉应用的开发。《计算机视觉算法:基于OpenCV的计算机应用开发》每一章都会讲解一些对应主题的计算机视觉算法,按照章节顺序,读者能学到大量可实际应用到项目中的计算机视觉算法。虽然《计算机视觉算法:基于OpenCV的计算机应用开发》大部分算法都是独立的,但强烈推荐读者从头开始阅读,并尝试按章节顺序建立计算机视觉知识体系。请读者亲手实践书中的每个例子,这些例子都很有趣,能让读者在实践过程中树立自信。
  《计算机视觉算法:基于OpenCV的计算机应用开发》是数月辛勤工作的成果,而且如果没有TikshaSarang耐心而出色的编辑、AdhithyaHaridas精准深刻的技术评审和批注以及SandeepMishra提供的这次难得的出版机会,《计算机视觉算法:基于OpenCV的计算机应用开发》是不可能完成的。感谢技术评审ZhuoQingliang先生的大力帮助和其他所有协助我完成并出版这《计算机视觉算法:基于OpenCV的计算机应用开发》的Packt出版社的员工以及计算机视觉开源社区的成员。
  《计算机视觉算法:基于OpenCV的计算机应用开发》的目标读者
  任何有扎实C++编程语言基础和第三方软件库使用经验的开发人员都能轻松阅读《计算机视觉算法:基于OpenCV的计算机应用开发》和上手书中的例子。另外,熟悉Python编程语言的开发者也能使用《计算机视觉算法:基于OpenCV的计算机应用开发》学习使用OpenCV软件库,但需要自己把C++的例子转为Python,因为《计算机视觉算法:基于OpenCV的计算机应用开发》中出现的算法主要是C++版的。
  《计算机视觉算法:基于OpenCV的计算机应用开发》内容
  第1章介绍计算机视觉科学的基础—它是什么,它用在哪,图像的定义和基本属性,例如像素、深度和通道等。该章比较短,是针对机器视觉领域的入门读者进行介绍的章节。
  第2章通过概述OpenCV开发最重要的组成模块来介绍OpenCV软件库及其核心部件。读者也能了解如何获取和使用OpenCV。该章会简略介绍用CMake创建OpenCV工程,让读者学会Mat类及其变体、图像视频的读写操作,以及获取摄像头输入(包括其他类型的输入方式)。
  第3章涵盖了用于创建和修改矩阵的基础算法。读者将学习如何进行矩阵运算,比如向量乘积、标量乘积和矩阵求逆。除了求均值、求和和傅里叶变换这些数学运算,这一章将引入很多基于矩阵元素的运算。
  第4章尽可能多地覆盖了《计算机视觉算法:基于OpenCV的计算机应用开发》涉及的各类图像处理算法。读者将学习如何在图像中绘制图形和文字,还将学习如何绘制直线、箭头、矩形等。该章还将展示各种广泛应用的图像滤镜操作算法,例如图像的平滑、膨胀、腐蚀和形态操作。学完该章,读者将熟悉功能强大的重映射算法和计算机视觉领域使用的各种色彩映射表。
  第5章引入直方图的概念并介绍单通道和多通道图像计算直方图的方法。读者将学习灰度和彩色图像的直方图数据可视化,或者说,由像素的色调值来计算直方图。读者还将学习反向投影这种直方图的逆运算。直方图的比较和均衡也是该章的主题。
  第6章解释了如何处理视频,尤其是实时目标检测和追踪,这些操作运用了一些流行的计算机视觉追踪算法。在简略介绍了视频处理的基础知识之后,读者将结合实例学习目标追踪应用场景下的均值偏移(MeanShift)、CAM偏移(CAMShift)算法及卡尔曼滤波(Kalmanfiltering)。学完该章,读者将掌握背景和前景提取算法及其在实践中的使用方法。
  第7章首先是目标检测的简介,接着引入各类用于形状分析的算法。该章涵盖的主题还包括关键点检测、描述符提取和描述符匹配,它们被用于基于特征(而不是基于简单的色调或亮度值)的目标检测中。
  第8章涵盖了OpenCV里的机器学习(ML)、深度神经网络(DNN)模块和一些重要的算法、类和函数。从SVM算法开始,读者将学习如何用多种类似的训练流程来训练模型,然后用模型来对输入进行分类。读者将学习如何用HOG描述符和SVM对图像分类。该章也涵盖了OpenCV中构建人工神经网络的方法,并介绍了级联分类。8.5节将教授读者如何使用第三方软件库生成的模型(例如TensorFlow模型)来实时检测多个物体。
  如何从书中获益更多
  尽管所有章节里需要的工具和软件在每章的开头都有描述,作为一个简单快速的参考,这里列表如下:
  一台普通计算机,要求安装了较新版本的Windows、macOS或Linux(比如Ubuntu)操作系统
  MicrosoftVisualStudio(Windows系统)
  Xcode(macOS系统)
  CMake
  OpenCV
  首先,读者可以通过网上搜索或是询问当地的计算机商店来了解目前主流计算机的配置,不过读者手头用的机器一般足够学习使用了。
  另外,使用哪种集成开发环境(IDE)或是编译系统(在本例中为CMake)与书中提供的例子关系不大。例如,只要熟悉OpenCV软件库在其中的设置方法,读者完全可以使用任何代码编辑器或编译系统来学习书中的例子。
  下载示例代码及彩色图像
  《计算机视觉算法:基于OpenCV的计算机应用开发》的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
  《计算机视觉算法:基于OpenCV的计算机应用开发》的代码包在https://github.com/PacktPublishing/Hands-On-Algorithms-for-Computer-Vision也能找到。这个GitHub仓库里的代码会保持更新。

其他推荐