计算机视觉是一门用计算机模拟生物视觉的学科,更具体地讲,就是让计算机代替人眼实现对目标的识别、分类、跟踪和场景理解。计算机视觉是人工智能的重要分支,也是一门具有很强综合性的学科,涉及计算机科学与工程、信号处理、光学、应用数学、统计学、神经生理学和认知科学等学科。
OpenCV是开源、跨平台的计算机视觉库,由英特尔公司发起并参与开发,在商业和研究领域中可以免费使用。本书介绍了如何通过Python来开发基于OpenCV 3.0的应用。作为当前非常流行的动态语言之一,Python不仅使用非常简单,而且功能强大。通过Python来学习OpenCV框架,可让读者快速理解计算机视觉的基本概念以及重要算法。
本书分9章来介绍计算机视觉的重要概念,所有的概念都融入了一些很有趣的项目。本书首先详细介绍了多个平台下基于Python的OpenCV安装,继而介绍了计算机视觉应用的基本操作,包括图像文件的读取与显示,图像处理的基本操作(比如边缘检测等),深度估计与分割,人脸检测与识别,图像的检索,目标的检测与识别,目标跟踪,神经网络的手写体识别。可以这样说,本书是一本不可多得的采用OpenCV实践计算机视觉应用的好书。
本书的第1章由重庆工商大学计算机科学与信息工程学院的刘波博士翻译;第2章、第5章至第9章由苗贝贝翻译;第3章和第4章由史斌翻译。同时,刘波博士负责全书的技术审稿工作。
翻译本书的过程也是译者不断学习的过程。为了保证专业词汇翻译的准确性,意译部分既不失原著意境又无偏差, 在翻译过程中查阅了大量相关资料。但由于时间和能力有很,书中内容难免出现差错。若有问题,读者可通过电子邮件liubo7971@163.com和alingse@foxmail.com与我们联系,欢迎一起探讨,共同进步。并且,我们也会将勘误信息公布在http://www.cnblogs.com/ml-cv/上。
本书翻译过程得到如下项目资助:(1)重庆市教委研究项目“多核正则化机器学习理论研究”,项目号为KJ130709;(2)重庆工商大学研究项目“基于多核学习的高维数据分析研究”,项目号为2013-56-09;(3)电子商务及供应链系统重庆市重点实验室研究项目“基于迹比率的特征选择及关键技术研究”;(4)大数据稀疏表示判别字典学习及其应用技术研究,项目号为KJ1400612。
感谢重庆工商大学计算机科学与信息工程学院金融信息化专业杨仕喜同学对本书代码进行验证,并提出了宝贵意见。感谢家人的支持与鼓励,尤其感谢妻子杨雪莉和女儿刘典、刘恩丫,她们的信任与鼓励给我提供了不断前进的动力。
封面图
目录
- 译者序
- 前言
- 作者简介
- 审校者简介
- 译者简介
- 第1章安装OpenCV1
- 1.1选择和使用合适的安装工具2
- 1.1.1在Windows上安装2
- 1.1.2在OS X系统中安装6
- 1.1.3在Ubuntu及其衍生版本中安装11
- 1.1.4在其他类Unix系统中安装12
- 1.2安装Contrib模块13
- 1.3运行示例13
- 1.4查找文档、帮助及更新14
- 1.5总结15
- 第2章处理文件、摄像头和图形用户界面16
- 2.1基本I/O脚本 16
- 2.1.1读/写图像文件16
- 2.1.2图像与原始字节之间的转换19
- 2.1.3使用numpy.array访问图像数据20
- 2.1.4视频文件的读/写22
- 2.1.5捕获摄像头的帧23
- 2.1.6在窗口显示图像24
- 2.1.7在窗口显示摄像头帧25
- 2.2Cameo项目(人脸跟踪和图像处理)26
- 2.3Cameo—面向对象的设计27
- 2.3.1使用managers. CaptureManager提取视频流27
- 2.3.2使用managers.WindowManager抽象窗口和键盘32
- 2.3.3cameo.Cameo的强大实现33
- 2.4总结34
- 第3章使用OpenCV 3处理图像36
- 3.1不同色彩空间的转换36
- 3.2傅里叶变换37
- 3.2.1高通滤波器37
- 3.2.2低通滤波器39
- 3.3创建模块39
- 3.4边缘检测40
- 3.5用定制内核做卷积41
- 3.6修改应用43
- 3.7Canny边缘检测44
- 3.8轮廓检测45
- 3.9边界框、最小矩形区域和最小闭圆的轮廓46
- 3.10凸轮廓与Douglas-Peucker算法48
- 3.11直线和圆检测50
- 3.11.1直线检测50
- 3.11.2圆检测51
- 3.12检测其他形状52
- 3.13总结52
- 第4章深度估计与分割53
- 4.1创建模块53
- 4.2捕获深度摄像头的帧54
- 4.3从视差图得到掩模56
- 4.4对复制操作执行掩模57
- 4.5使用普通摄像头进行深度估计59
- 4.6使用分水岭和GrabCut算法进行物体分割63
- 4.6.1用GrabCut进行前景检测的例子64
- 4.6.2使用分水岭算法进行图像分割66
- 4.7总结69
- 第5章人脸检测和识别70
- 5.1Haar级联的概念70
- 5.2获取Haar级联数据71
- 5.3使用OpenCV进行人脸检测72
- 5.3.1静态图像中的人脸检测72
- 5.3.2视频中的人脸检测74
- 5.3.3人脸识别76
- 5.4总结82
- 第6章图像检索以及基于图像描述符的搜索83
- 6.1特征检测算法83
- 6.1.1特征定义84
- 6.1.2使用DoG和SIFT进行特征提取与描述86
- 6.1.3使用快速Hessian算法和SURF来提取和检测特征89
- 6.1.4基于ORB的特征检测和特征匹配91
- 6.1.5ORB特征匹配93
- 6.1.6K-最近邻匹配95
- 6.1.7FLANN匹配96
- 6.1.8FLANN的单应性匹配99
- 6.1.9基于文身取证的应用程序示例102
- 6.2总结105
- 第7章目标检测与识别106
- 7.1目标检测与识别技术106
- 7.1.1HOG描述符107
- 7.1.2检测人112
- 7.1.3创建和训练目标检测器113
- 7.2汽车检测116
- 7.2.1代码的功能118
- 7.2.2SVM和滑动窗口122
- 7.3总结134
- 第8章目标跟踪135
- 8.1检测移动的目标135
- 8.2背景分割器:KNN、MOG2和GMG138
- 8.2.1均值漂移和CAMShift142
- 8.2.2彩色直方图144
- 8.2.3返回代码146
- 8.3CAMShift147
- 8.4卡尔曼滤波器149
- 8.4.1预测和更新149
- 8.4.2范例150
- 8.4.3一个基于行人跟踪的例子153
- 8.4.4Pedestrian类154
- 8.4.5主程序157
- 8.5总结159
- 第9章基于OpenCV的神经网络简介160
- 9.1人工神经网络160
- 9.2人工神经网络的结构161
- 9.2.1网络层级示例162
- 9.2.2学习算法163
- 9.3OpenCV中的ANN164
- 9.3.1基于ANN的动物分类166
- 9.3.2训练周期169
- 9.4用人工神经网络进行手写数字识别170
- 9.4.1MNIST—手写数字数据库170
- 9.4.2定制训练数据170
- 9.4.3初始参数171
- 9.4.4迭代次数171
- 9.4.5其他参数171
- 9.4.6迷你库172
- 9.4.7主文件175
- 9.5可能的改进和潜在的应用180
- 9.5.1改进180
- 9.5.2应用181
- 9.6总结181