1、CMYCMMYCYCMYKOpenCV算法精解:基于Python与C+fy.pdf 1 2017/9/7 10:07:00内 容 简 介本书是以 OpenCV 为工具学习数字图像处理的入门书。内容由浅入深,每一章都采用阐述基本概念、数学原理、C+实现、Python 实现相结合的方法,使初学者循序渐进地掌握数字图像处理技术。本书既注重基本的概念理论及数学原理,也注重其代码实现及实际应用,力求帮助读者全面系统地掌握图像算法的基本技术,同时为掌握 OpenCV 打下良好的基础。本书适合入门图像处理和计算机视觉领域的初学者阅读,要求读者具备一定的 C+或Python 编程基础。未经许可,不得以任何方式
2、复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据OpenCV 算法精解:基于 Python 与 C+/张平编著.北京:电子工业出版社,2017.10ISBN 978-7-121-32495-6I.xOII.x张III.x图象处理软件程序设计 IV.xTP391.41中国版本图书馆 CIP 数据核字(2017)第 197102 号策划编辑:郑柳洁责任编辑:葛娜印刷:北京京科印刷有限公司装订:北京京科印刷有限公司出版发行:电子工业出版社北京市海淀区万寿路 173 信箱邮编:100036开本:787980 1/16 印张:26.25 字数:571 千字版次:2017 年
3、 10 月第 1 版印次:2017 年 10 月第 1 次印刷定价:79.00 元凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。本书咨询联系方式:(010)51260888-。前言数字图像处理,即用计算机对图像进行处理。初期,图像数字化的设备是非常昂贵和复杂的,随着互联网、人工智能、智能硬件等技术的迅猛发展,硬件成本越来越便宜,使得在我们生活中产生了大量的图像和视频,与此同时,计算机视觉技术在人类生活中起到的作用也越来越大,其在商业、工业、医学
4、等领域有着广泛的应用。如今,连市场上很低价位的智能手机都可以配置一组高分辨率的摄像头,安卓和苹果手机应用市场中出现了大量基于图像处理的 App,比如 Rookie Cam、VSCO、Snapseed 等,这些 App 内均有大量图像处理方法,如图像的裁剪、缩放、旋转、美颜、饱和度和亮度的调整及其各种滤镜方法等,通常可以满足人们日常生活中拍照娱乐的需求。比如淘宝中的“拍立淘”功能,可以用它拍下我们喜欢的物品,然后会自动检索出与其匹配的商品。还有比如基于人脸识别的手机支付、考勤系统等,基于字符识别的智能停车系统等,可见数字图像处理已经慢慢地和我们的生活、娱乐息息相关。本书整体架构及特色OpenCV
5、 作为一款开源的计算机视觉开发工具包,在计算机视觉领域扮演着非常重要的角色,它在提供源码的同时,给出了非常完整的 OpenCV 函数手册及其示例手册,这两个文档也是学习 OpenCV 的第一手和最重要的资料。这些优势使得数千名研究人员在视觉领域能够获得更高的生产力,并帮助学生和专业人员快速开发和研究有关的机器视觉项目,而我也是其中的众多受益者之一。本书大体按照经典教材冈萨雷斯的数字图像处理(第三版)和 OpenCV 使用手册(主要是 improc 模块)的知识脉络,并在此基础上加入了某些具体方向的最新方法,试图帮助初学者更加快速、系统地掌握基本的数字图像处理技术的数学原理,以及如何将抽象的数学
6、原理转换为代码实现的方法。然后详细介绍了 OpenCV 实现对应的函数,并分别给出了C+接口和 Python 接口的使用方法,以及 OpenCV 2.X 和 OpenCV 3.X 的区别。前言本书面向的读者本书中图像算法的数学原理部分适合数字图像处理的初学者,示例的 C+部分适合具备 C+编程基础的读者,示例的 Python 部分适合具备 Python 编程基础的读者,同时对于使用 OpenCV 2.X 版本的读者,书中介绍了 OpenCV 3.X 版本的新特性,这样可以快速过渡到3.X 版本。致谢特别感谢电子工业出版社博文视点的编辑郑柳洁老师,在写这本书的过程中,她不厌其烦地解答我遇到的各种
7、各样的问题,真心感谢她一直以来的支持和肯定。感谢 CSDN 的白羽中帮助我联系到了博文视点的杨中兴和郑柳洁老师,没有您的帮助,将无法促成这本书的出版。感谢我的朋友戴传军和张莹莹给这本书提出了宝贵的建议,以及帮助我完成了书中一些非常重要的图表。感谢我的父母、姐姐一直以来对我生活和工作的支持。感谢 OpenCV 开源库的所有贡献者。限于篇幅,加之作者水平有限,疏漏和错误在所难免,恳请读者批评、指正。如果您发现了错误或者有好的建议,请发邮件至 ,将不胜感激。iv目录1OpenCV 入门11.1初识 OpenCV.11.1.1OpenCV 的模块简介.11.1.2OpenCV 2.4.13 与 3.2
8、 版本的区别.21.2部署 OpenCV.31.2.1在 Visual Studio 2015 中配置 OpenCV.31.2.2OpenCV 2.X C+API 的第一个示例.101.2.3OpenCV 3.X C+API 的第一个示例.121.2.4在 Anaconda 2 中配置 OpenCV.131.2.5OpenCV 2.X Python API 的第一个示例.151.2.6OpenCV 3.X Python API 的第一个示例.162图像数字化172.1认识 Numpy 中的 ndarray.172.1.1构造 ndarray 对象.172.1.2访问 ndarray 中的值.1
9、92.2认识 OpenCV 中的 Mat 类.212.2.1初识 Mat.212.2.2构造单通道 Mat 对象.212.2.3获得单通道 Mat 的基本信息.232.2.4访问单通道 Mat 对象中的值.242.2.5向量类 Vec.292.2.6构造多通道 Mat 对象.302.2.7访问多通道 Mat 对象中的值.302.2.8获得 Mat 中某一区域的值.352.3矩阵的运算.38目录2.3.1加法运算.382.3.2减法运算.412.3.3点乘运算.422.3.4点除运算.442.3.5乘法运算.452.3.6其他运算.492.4灰度图像数字化.502.4.1概述.502.4.2将灰
10、度图像转换为 Mat.512.4.3将灰度图转换为 ndarray.532.5彩色图像数字化.532.5.1将 RGB 彩色图像转换为多通道 Mat.542.5.2将 RGB 彩色图转换为三维的 ndarray.552.6参考文献.563几何变换573.1仿射变换.573.1.1平移.583.1.2放大和缩小.593.1.3旋转.603.1.4计算仿射矩阵.623.1.5插值算法.653.1.6Python 实现.693.1.7C+实现.713.1.8旋转函数 rotate(OpenCV3.X 新特性).723.2投影变换.743.2.1原理详解.743.2.2Python 实现.763.2.
11、3C+实现.773.3极坐标变换.803.3.1原理详解.803.3.2Python 实现.843.3.3C+实现.87vi目录3.3.4线性极坐标函数 linearPolar(OpenCV 3.X 新特性).913.3.5对数极坐标函数 logPolar(OpenCV 3.X 新特性).933.4参考文献.954对比度增强964.1灰度直方图.964.1.1什么是灰度直方图.964.1.2Python 及 C+实现.974.2线性变换.1004.2.1原理详解.1004.2.2Python 实现.1014.2.3C+实现.1034.3直方图正规化.1054.3.1原理详解.1054.3.2P
12、ython 实现.1054.3.3C+实现.1064.3.4正规化函数 normalize.1084.4伽马变换.1114.4.1原理详解.1114.4.2Python 实现.1124.4.3C+实现.1134.5全局直方图均衡化.1144.5.1原理详解.1144.5.2Python 实现.1154.5.3C+实现.1174.6限制对比度的自适应直方图均衡化.1184.6.1原理详解.1184.6.2代码实现.1194.7参考文献.1215图像平滑1225.1二维离散卷积.1225.1.1卷积定义及矩阵形式.1225.1.2可分离卷积核.134vii目录5.1.3离散卷积的性质.1355.2
13、高斯平滑.1405.2.1高斯卷积核的构建及分离性.1405.2.2高斯卷积核的二项式近似.1425.2.3Python 实现.1445.2.4C+实现.1455.3均值平滑.1475.3.1均值卷积核的构建及分离性.1475.3.2快速均值平滑.1475.3.3Python 实现.1495.3.4C+实现.1515.4中值平滑.1545.4.1原理详解.1545.4.2Python 实现.1555.4.3C+实现.1575.5双边滤波.1615.5.1原理详解.1615.5.2Python 实现.1625.5.3C+实现.1645.6联合双边滤波.1685.6.1原理详解.1685.6.2P
14、ython 实现.1685.6.3C+实现.1705.7导向滤波.1735.7.1原理详解.1735.7.2Python 实现.1745.7.3快速导向滤波.1765.7.4C+实现.1775.8参考文献.1796阈值分割1816.1方法概述.1826.1.1全局阈值分割.182viii目录6.1.2阈值函数 threshold(OpenCV3.X 新特性).1836.1.3局部阈值分割.1866.2直方图技术法.1876.2.1原理详解.1876.2.2Python 实现.1886.2.3C+实现.1906.3熵算法.1916.3.1原理详解.1916.3.2代码实现.1936.4Otsu
15、阈值处理.1956.4.1原理详解.1956.4.2Python 实现.1966.4.3C+实现.1976.5自适应阈值.1996.5.1原理详解.2006.5.2Python 实现.2006.5.3C+实现.2016.6二值图的逻辑运算.2036.6.1“与”和“或”运算.2036.6.2Python 实现.2046.6.3C+实现.2046.7参考文献.2067形态学处理2077.1腐蚀.2077.1.1原理详解.2077.1.2实现代码及效果.2087.2膨胀.2127.2.1原理详解.2127.2.2Python 实现.2137.2.3C+实现.2147.3开运算和闭运算.2167.3
16、.1原理详解.216ix目录7.3.2Python 实现.2167.4其他形态学处理操作.2197.4.1顶帽变换和底帽变换.2197.4.2形态学梯度.2207.4.3C+实现.2208边缘检测2238.1Roberts 算子.2248.1.1原理详解.2248.1.2Python 实现.2258.1.3C+实现.2278.2Prewitt 边缘检测.2298.2.1Prewitt 算子及分离性.2298.2.2Python 实现.2308.2.3C+实现.2328.3Sobel 边缘检测.2348.3.1Sobel 算子及分离性.2348.3.2构建高阶的 Sobel 算子.2348.3.3Python 实现.2358.3.4C+实现.2398.4Scharr 算子.2428.4.1原理详解.2428.4.2Python 实现.2428.4.3C+实现.2438.5Kirsch 算子和 Robinson 算子.2448.5.1原理详解.2448.5.2代码实现及效果.2458.6Canny 边缘检测.2488.6.1原理详解.2488.6.2Python 实现.2578.6.3C+