OpenCV算法精解:基于Python与C++
  • 推荐8
  • 收藏17
  • 浏览11.6K

OpenCV算法精解:基于Python与C++

张平 (作者)  葛娜 (责任编辑)

  • 书  号:978-7-121-32495-6
  • 出版日期:2017-10-30
  • 页  数:412
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:郑柳洁
电子书 ¥49.00
购买电子书
纸质版 ¥79.00
开篇先介绍如何在Windows和ubuntu上部署OpenCV,然后过度到核心章节,从灰度图像、彩色图像、图像平滑、边缘检测、霍夫变换等几个维度入手讲解,尽量拆分算法,代码实现用C++和Python代码。案例在每章最后分享,方便读者练习。
系统阐述OpenCV基本概念、数学原理、C++和Python实现!
前言
数字图像处理,即用计算机对图像进行处理。初期,图像数字化的设备是非常昂贵和复杂的,随着互联网、人工智能、智能硬件等技术的迅猛发展,硬件成本越来越便宜,使得在我们生活中产生了大量的图像和视频,与此同时,计算机视觉技术在人类生活中起到的作用也越来越大,其在商业、工业、医学等领域有着广泛的应用。
如今,连市场上很低价位的智能手机都可以配置一组高分辨率的摄像头,安卓和苹果手机应用市场中出现了大量基于图像处理的App,比如Rookie Cam、VSCO、Snapseed 等,这些App 内均有大量图像处理方法,如图像的裁剪、缩放、旋转、美颜、饱和度和亮度的调整及其各种滤镜方法等,通常可以满足人们日常生活中拍照娱乐的需求。我们经常使用的购物App,如淘宝中的“拍立淘”功能,可以用它拍下我们喜欢的物品,然后会自动检索出与其匹配的商品。还有比如基于人脸识别的手机支付、考勤系统等,基于字符识别的智能停车系统等,可见数字图像处理已经慢慢地和我们的生活、娱乐息息相关。
本书整体架构及特色
OpenCV 作为一款开源的计算机视觉开发工具包,在计算机视觉领域扮演着非常重要的角色,它在提供源码的同时,给出了非常完整的OpenCV 函数手册及其示例手册,这两个文档也是学习OpenCV 的第一手和最重要的资料。这些优势使得数千名研究人员在视觉领域能够获得更高的生产力,并帮助学生和专业人员快速开发和研究有关的机器视觉项目,而我也是其中的众多受益者之一。
本书大体按照经典教材冈萨雷斯的《数字图像处理(第三版)》和OpenCV 使用手册(主要是improc 模块)的知识脉络,并在此基础上加入了某些具体方向的最新方法,试图帮助初学者更加快速、系统地掌握基本的数字图像处理技术的数学原理,以及如何将抽象的数学原理转换为代码实现的方法,然后详细介绍了OpenCV 实现对应的函数,并分别给出了C++ 接口和Python 接口的使用方法,以及OpenCV 2.X 和OpenCV 3.X 的区别。
本书面向的读者
本书中图像算法的数学原理部分适合数字图像处理的初学者,示例的C++ 部分适合具备C++ 编程基础的读者,示例的Python 部分适合具备Python 编程基础的读者,同时对于使用OpenCV 2.X 版本的读者,书中介绍了OpenCV 3.X 版本的新特性,这样可以快速过渡到3.X 版本。
致谢
特别感谢电子工业出版社博文视点的编辑郑柳洁老师,在写这本书的过程中,她不厌其烦地解答我遇到的各种各样的问题,真心感谢她一直以来的支持和肯定。
感谢CSDN 的白羽中帮助我联系到了博文视点的杨中兴和郑柳洁老师,没有您的帮助,将无法促成这本书的出版。
感谢我的朋友戴传军和张莹莹给这本书提出了宝贵的建议,以及帮助我完成了书中一些非常重要的图表。
感谢我的父母、姐姐一直以来对我生活和工作的支持。
感谢OpenCV 开源库的所有贡献者。
限于篇幅,加之作者水平有限,疏漏和错误在所难免,恳请读者批评、指正。如果您发现了错误或者有好的建议,请发邮件至wxcdzhangping@126.com,将不胜感激。
iv

目录

目录
1 OpenCV入门
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++实现

读者评论

  • p220底帽运算的描述是不是闭运算的结果减去原图啊

    liujiafu发表于 2020/12/15 11:30:51
  • 很好

    pancrasChen发表于 2020/10/29 19:57:31
  • 没有C++ 源代码?

    lxdlbs371发表于 2020/7/28 16:13:36
  • 第五章 平滑快速平滑 在main中创建 winsize = np.array((5,5)) 在fastMeanBlur中 添加 halfH = halfH.astype(np.uint8) halfW = halfW.astype(np.uint8)

    博文视点发表于 2020/7/27 12:45:54
  • 我的天哪,买了后python用的和我用的不一样

    guo发表于 2020/3/24 15:24:12
    • 可能是版本问题,注意版本控制

      zhangkun211发表于 2021/3/15 8:33:30

相关图书

Python一行流:像专家一样写代码

Christian Mayer (作者) 苏丹 (译者)

本书专注于从初学迈向进阶的Python编码技术:如何像专家一样写出优雅、准确、简洁高效的Python 单行代码;阅读任意一行Python 代码时,如何系统性地对...

¥89.00

剑指Offer(专项强化版):数据结构与算法名企面试题精讲

何海涛 (作者)

本书全面、系统地总结了在准备程序员面试过程中必备的数据结构与算法。本书首先详细讨论整数、数组、链表、字符串、哈希表、栈、队列、二叉树、堆和前缀树等常用的数据结构...

¥89.00

C++服务器开发精髓

张远龙 (作者)

本书从操作系统原理角度讲解进行C++服务器开发所需掌握的技术栈。全书总计9章,第1~2章讲解C++ 11/14/17新标准中的常用特性、新增类库,以及C++开发...

 

PHP编程(第4版)

Rasmus Lerdorf(拉斯马斯·勒多夫), Kevin Tatroe(凯文·塔特罗), Peter MacIntyre(彼得·麦金太尔) (作者) 卢涛 (译者)

PHP是一种被广泛使用的Web编程语言,它简单易用,而且与时俱进,不断进化,提升性能。本书基于PHP 7.4,深入介绍 PHP编程技术,涵盖了 PHP 所有基本...

¥109.00

深入理解Spring Cloud与实战

方剑 (作者)

本书共分10章,主要介绍Spring Cloud各个核心组件的设计原理,以及目前流行的Spring Cloud Alibaba和 Netflix组件,并且剖析S...

¥106.00

基于Kotlin的Spring Boot微服务实战

袁康 (作者)

本书介绍了Kotlin在Spring Boot微服务开发中的实践,并使用Kotlin作为开发语言,介绍了函数式编程思想、Kotlin的语法、Kotlin在常用中...

¥69.30