具体描述
《OpenCV算法精解:基于Python与C++》是以OpenCV 为工具学习数字图像处理的入门书。内容由浅入深,每一章都采用阐述基本概念、数学原理、C++ 实现、Python 实现相结合的方法,使初学者循序渐进地掌握数字图像处理技术。本书既注重基本的概念理论及数学原理,也注重其代码实现及实际应用,力求帮助读者全面系统地掌握图像算法的基本技术,同时为掌握OpenCV 打下良好的基础。
《OpenCV算法精解:基于Python与C++》适合入门图像处理和计算机视觉领域的初学者阅读,要求读者具备一定的C++ 或Python 编程基础。
作者简介
张平,数学与应用数学专业,算法工程师。主要从事图像算法研究和产品的应用开发,此外还从事有关机器学习、数据挖掘算法的应用研发工作。
目录信息
1.1 初识OpenCV
1.1.1 OpenCV的模块简介
1.1.2 OpenCV 2.4.13与3.2版本的区别
1.2 部署OpenCV
1.2.1 在Visual Studio 2015中 配置OpenCV
1.2.2 OpenCV 2.X C++ API的第一个示例
1.2.3 OpenCV 3.X C++ API的第一个示例
1.2.4 在Anaconda 2中配置OpenCV
1.2.5 OpenCV 2.X Python API的第一个示例
1.2.6 OpenCV 3.X Python API的第一个示例
2 图像数字化
2.1 认识Numpy中的ndarray
2.1.1 构造ndarray对象
2.1.2 访问ndarray中的值
2.2 认识OpenCV中的Mat类
2.2.1 初识Mat
2.2.2 构造单通道Mat对象
2.2.3 获得单通道Mat的基本信息
2.2.4 访问单通道Mat对象中的值
2.2.5 向量类Vec
2.2.6 构造多通道Mat对象
2.2.7 访问多通道Mat对象中的值
2.2.8 获得Mat中某一区域的值
2.3 矩阵的运算
2.3.1 加法运算
2.3.2 减法运算
2.3.3 点乘运算
2.3.4 点除运算
2.3.5 乘法运算
2.3.6 其他运算
2.4 灰度图像数字化
2.4.1 概述
2.4.2 将灰度图像转换为Mat
2.4.3 将灰度图转换为ndarray
2.5 彩色图像数字化
2.5.1 将RGB彩色图像转换为多通道Mat
2.5.2 将RGB彩色图转换为三维的ndarray
2.6 参考文献
3 几何变换
3.1 仿射变换
3.1.1 平移
3.1.2 放大和缩小
3.1.3 旋转
3.1.4 计算仿射矩阵
3.1.5 插值算法
3.1.6 Python实现
3.1.7 C++实现
3.1.8 旋转函数rotate(OpenCV3.X新特性)
3.2 投影变换
3.2.1 原理详解
3.2.2 Python实现
3.2.3 C++实现
3.3 极坐标变换
3.3.1 原理详解
3.3.2 Python实现
3.3.3 C++实现
3.3.4 线性极坐标函数linearPolar(OpenCV 3.X新特性)
3.3.5 对数极坐标函数logPolar(OpenCV 3.X新特性)
3.4 参考文献
4 对比度增强
4.1 灰度直方图
4.1.1 什么是灰度直方图
4.1.2 Python及C++实现
4.2 线性变换
4.2.1 原理详解
4.2.2 Python实现
4.2.3 C++实现
4.3 直方图正规化
4.3.1 原理详解
4.3.2 Python实现
4.3.3 C++实现
4.3.4 正规化函数normalize
4.4 伽马变换
4.4.1 原理详解
4.4.2 Python实现
4.4.3 C++实现
4.5 全局直方图均衡化
4.5.1 原理详解
4.5.2 Python实现
4.5.3 C++实现
4.6 限制对比度的自适应直方图均衡化
4.6.1 原理详解
4.6.2 代码实现
4.7 参考文献
5 图像平滑
5.1 二维离散卷积
5.1.1 卷积定义及矩阵形式
5.1.2 可分离卷积核
5.1.3 离散卷积的性质
5.2 高斯平滑
5.2.1 高斯卷积核的构建及分离性
5.2.2 高斯卷积核的二项式近似
5.2.3 Python实现
5.2.4 C++实现
5.3 均值平滑
5.3.1 均值卷积核的构建及分离性
5.3.2 快速均值平滑
5.3.3 Python实现
5.3.4 C++实现
5.4 中值平滑
5.4.1 原理详解
5.4.2 Python实现
5.4.3 C++实现
5.5 双边滤波
5.5.1 原理详解
5.5.2 Python实现
5.5.3 C++实现
5.6 联合双边滤波
5.6.1 原理详解
5.6.2 Python实现
5.6.3 C++实现
5.7 导向滤波
5.7.1 原理详解
5.7.2 Python实现
5.7.3 快速导向滤波
5.7.4 C++实现
5.8 参考文献
6 阈值分割
6.1 方法概述
6.1.1 全局阈值分割
6.1.2 阈值函数threshold(OpenCV3.X新特性)
6.1.3 局部阈值分割
6.2 直方图技术法
6.2.1 原理详解
6.2.2 Python实现
6.2.3 C++实现
6.3 熵算法
6.3.1 原理详解
6.3.2 代码实现
6.4 Otsu阈值处理
6.4.1 原理详解
6.4.2 Python实现
6.4.3 C++实现
6.5 自适应阈值
6.5.1 原理详解
6.5.2 Python实现
6.5.3 C++实现
6.6 二值图的逻辑运算
6.6.1 “与”和“或”运算
6.6.2 Python实现
6.6.3 C++实现
6.7 参考文献
7 形态学处理
7.1 腐蚀
7.1.1 原理详解
7.1.2 实现代码及效果
7.2 膨胀
7.2.1 原理详解
7.2.2 Python实现
7.2.3 C++实现
7.3 开运算和闭运算
7.3.1 原理详解
7.3.2 Python实现
7.4 其他形态学处理操作
7.4.1 顶帽变换和底帽变换
7.4.2 形态学梯度
7.4.3 C++实现
8 边缘检测
8.1 Roberts算子
8.1.1 原理详解
8.1.2 Python实现
8.1.3 C++实现
8.2 Prewitt边缘检测
8.2.1 Prewitt算子及分离性
8.2.2 Python实现
8.2.3 C++实现
8.3 Sobel边缘检测
8.3.1 Sobel算子及分离性
8.3.2 构建高阶的Sobel算子
8.3.3 Python实现
8.3.4 C++实现
8.4 Scharr算子
8.4.1 原理详解
8.4.2 Python实现
8.4.3 C++实现
8.5 Kirsch算子和Robinson算子
8.5.1 原理详解
8.5.2 代码实现及效果
8.6 Canny边缘检测
8.6.1 原理详解
8.6.2 Python实现
8.6.3 C++实现
8.7 Laplacian算子
8.7.1 原理详解
8.7.2 Python实现
8.7.3 C++实现
8.8 高斯拉普拉斯(LoG)边缘检测
8.8.1 原理详解
8.8.2 Python实现
8.8.3 C++实现
8.9 高斯差分(DoG)边缘检测
8.9.1 高斯拉普拉斯与高斯差分的关系
8.9.2 Python实现
8.9.3 C++实现
8.10 Marr-Hildreth边缘检测
8.10.1 算法步骤详解
8.10.2 Pyton实现
8.10.3 C++实现
8.11 参考文献
9 几何形状的检测和拟合
9.1 点集的最小外包
9.1.1 最小外包旋转矩形
9.1.2 旋转矩形的4个顶点(OpenCV 3.X新特性)
9.1.3 最小外包圆
9.1.4 最小外包直立矩形(OpenCV 3.X新特性)
9.1.5 最小凸包
9.1.6 最小外包三角形( OpenCV 3.X新特性)
9.2 霍夫直线检测
9.2.1 原理详解
9.2.2 Python实现
9.2.3 C++实现
9.3 霍夫圆检测
9.3.1 标准霍夫圆检测
9.3.2 Python实现
9.3.3 基于梯度的霍夫圆检测
9.3.4 基于梯度的霍夫圆检测函数HoughCircles
9.4 轮廓
9.4.1 查找、绘制轮廓
9.4.2 外包、拟合轮廓
9.4.3 轮廓的周长和面积
9.4.4 点和轮廓的位置关系
9.4.5 轮廓的凸包缺陷
9.5 参考文献
10 傅里叶变换
10.1 二维离散的傅里叶(逆)变换
10.1.1 数学理解篇
10.1.2 快速傅里叶变换
10.1.3 C++实现
10.1.4 Python实现
10.2 傅里叶幅度谱与相位谱
10.2.1 基础知识
10.2.2 Python实现
10.2.3 C++实现
10.3 谱残差显著性检测
10.3.1 原理详解
10.3.2 Python实现
10.3.3 C++实现
10.4 卷积与傅里叶变换的关系
10.4.1 卷积定理
10.4.2 Python实现
10.5 通过快速傅里叶变换计算卷积
10.5.1 步骤详解
10.5.2 Python实现
10.5.3 C++实现
10.6 参考文献
11 频率域滤波
11.1 概述及原理详解
11.2 低通滤波和高通滤波
11.2.1 三种常用的低通滤波器
11.2.2 低通滤波的C++实现
11.2.3 低通滤波的Python实现
11.2.4 三种常用的高通滤波器
11.3 带通和带阻滤波
11.3.1 三种常用的带通滤波器
11.3.2 三种常用的带阻滤波器
11.4 自定义滤波器
11.4.1 原理详解
11.4.2 C++实现
11.5 同态滤波
11.5.1 原理详解
11.5.2 Python实现
11.6 参考文献
12 色彩空间
12.1 常见的色彩空间
12.1.1 RGB色彩空间
12.1.2 HSV色彩空间
12.1.3 HLS色彩空间
12.2 调整彩色图像的饱和度和亮度
12.2.1 Python实现
12.2.2 C++实现
· · · · · · (收起)
读后感
用户评价
这本关于计算机视觉的书籍在讲解算法的深度和广度上都给我留下了深刻的印象。作者并没有停留在仅仅展示代码的层面,而是深入剖析了每一个核心算法背后的数学原理和逻辑推导。比如,在介绍特征提取算法时,书中详尽地阐述了SIFT和SURF的内部机制,以及它们是如何在高维空间中实现尺度不变性和旋转不变性的。我特别欣赏作者在解释复杂概念时所采取的循序渐进的方式,使得即便是初次接触这些前沿理论的读者,也能逐步建立起坚实的理论基础。书中大量的图示和伪代码辅助理解,极大地降低了学习曲线的陡峭程度。通过阅读这本书,我感觉自己对计算机视觉的理解不再是停留在应用层面的“调包侠”,而是真正开始理解“为什么”以及“如何”去优化这些算法。尤其对于那些希望在算法层面进行深入研究或开发创新应用的人士来说,这本书无疑是提供了一个极具价值的知识宝库,它所传授的不仅仅是知识点,更是一种严谨的、工程化的思维方式。
这本书的实战性远超我最初的预期,它完美地融合了理论的精妙与实践的落地。我尝试着跟着书中的案例,用Python和C++分别实现了一些经典的图像处理流水线,比如目标跟踪和三维重建。令人称道的是,作者在不同语言的实现上都保持了极高的一致性,这对于需要进行性能优化或跨平台部署的开发者来说,简直是福音。C++部分的代码组织得非常清晰,充分利用了现代C++的特性,效率令人满意;而Python部分则更侧重于快速原型开发和算法验证,代码简洁且易于修改。这种“双管齐下”的讲解方式,让我们可以根据不同的项目需求灵活选择工具。更重要的是,书中对每一步操作的性能考量和潜在的陷阱都有所提及,比如内存管理、并行化处理的注意事项等,这些都是教科书里往往会忽略,但在实际工程中至关重要的细节。可以说,这本书成功地架起了学术研究和工业应用之间的桥梁,让学习过程充满了即时反馈的成就感。
在阅读过程中,我注意到作者在选择讲解的算法时具有很强的洞察力,覆盖面既广又不失重点。它没有陷入罗列所有已知算法的泥潭,而是精选了那些在现代视觉系统中占据核心地位的技术。从基础的图像滤波、几何变换,到进阶的立体视觉、深度估计,再到最新的基于深度学习的某些传统算法的替代方案,其内容布局非常合理。对于我个人而言,最受益的是关于相机标定和多视图几何的那几章。作者用一种非常直观的方式解释了投影矩阵的构建过程,以及如何通过非线性优化来最小化重投影误差。这部分内容往往是许多初学者的难点,但在这本书中,我感觉障碍被显著降低了。这种对知识点“价值排序”的把握,使得学习路径清晰高效,确保了读者能够把有限的时间投入到产出比最高的知识模块上,非常适合希望快速掌握领域核心技能的专业人士。
我特别欣赏这本书在工具链和环境配置上的细致入微。在现今的软件生态中,库的版本兼容性和编译环境的设置常常是劝退新手的头号难题。这本书似乎预料到了这一点,在开篇就提供了非常详尽的环境搭建指南,包括推荐的编译器版本、关键依赖库的获取路径,以及在不同操作系统下可能遇到的编译错误及解决方案。这极大地节省了我初期调试环境的时间,让我能够更早地进入算法学习的核心环节。此外,书中对于如何高效利用GPU进行加速也做了一些介绍,虽然不是专门的CUDA教程,但提供了必要的接口和思路,让读者意识到优化潜力所在。这种对整个开发生命周期——从环境准备到高效执行——的全面覆盖,体现了作者作为一名资深从业者的责任心和对读者学习体验的关怀,让整个学习过程流畅且富有成效。
这本书的叙事风格非常引人入胜,完全不像是一本枯燥的技术手册。作者的文字中透露着对计算机视觉这门学科的热爱和长期的实践经验。阅读时,常常能感受到一种“大师点拨”的氛围。比如,在讨论如何处理真实世界中光照不均和噪声干扰问题时,作者不是简单地抛出一个滤波器公式,而是会结合一些实际案例,讲述为什么在特定场景下,LBP比HOG更适合,或者何时应该权衡使用高斯模糊与双边滤波。这种基于经验的对比和权衡分析,极大地提升了我的批判性思考能力。很多时候,书中的解释会引导你去思考:“如果我的数据有某个特性,我应该如何修改这个标准算法?”这种启发式的教学法,让学习过程变得主动和充满探索欲。它教会了我如何成为一个能根据环境变化调整策略的“视觉工程师”,而非仅仅是公式的搬运工。
虽然算法基本上冈雷萨斯那本都有,但在国内的Opencv书里算是写得相当用心了
入门opencv还可以,了解基本原理还是很重要的
考虑买。
虽然算法基本上冈雷萨斯那本都有,但在国内的Opencv书里算是写得相当用心了
在实践的同时,也有理论的介绍。介绍每个算法后,都有对应的结果展示,更方便开发者!里面许多算法还能让你大开眼界。而通过阈值或者轮廓提取信息以及通过几何学来筛选信息是一套定位目标的方法。