OpenCV 4快速入门:基于Python的算法实战
  • 推荐0
  • 收藏0
  • 浏览663

OpenCV 4快速入门:基于Python的算法实战

肖铃 (作者) 

  • 书  号:978-7-121-42439-7
  • 出版日期:2022-01-05
  • 页  数:460
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥109.00
本书是一本通过OpenCV 4来讲解算法的入门书。全书共分为4个部分,第一部分包括第1~3章,主要有OpenCVr入门知识、OpenCV 的图像读写模块和和辛苦core模块讲解;第二部分包括第4~7章,主要有头像处理imgproc模块、视频处理videoio模块和可视化highgui模块、视频分析video模块讲解;第三部分包括第8~10章,主要有2d特征框架feature2d模块、照片处理photo模块、目标检测objdetect模块讲解;第四部分包括第11~12章,包括有深度神经网络dnn模块和机器学习ml模块等众多内容讲解。
OpenCV,模版化,行业首选
北宋大家张载的“横渠四句”非常有名,“为天地立心,为生民立命,为往圣继绝学,为万世开太平”,历史上很多名人以之作为安身立命追求事业的勉励语。第一次读这句名言时,我非常激动,现在也时常想起,虽无法实现却也心向往之。
有幸与电子工业出版社再次合作,个人能力浅薄,不敢妄谈“为往圣继绝学”,但也希望自己的书有一些实用价值,能在技术传播中贡献一份绵薄之力。在写作前,刘伟老师(本书编辑)和我反复推敲写作的目的是什么,这本书与别的图书有什么不同,能给读者带来什么帮助等命题。我们围绕上述命题提出了如下 4 个问题:为什么要学习图像处理?为什么要选用 OpenCV?为什么要用OpenCV 4?这本书与别的图书有什么不同?
下面就通过对这 4 个问题的回答来介绍一下本书,让读者能够对本书的写作目的、写作思路,以及如何参考本书进行 OpenCV 的学习有一个初步的理解。
为什么要学习图像处理?
图像处理之所以重要,是因为人类对认知世界的需要。
我们都知道,当前智能手机的普及率非常高,当看到美景或有事情发生时,几乎所有人都会拿起手机拍照或录制视频,并将它们分享在各大平台。爱美之心,人皆有之,因此,相机软件也集成了越来越多的功能,如美颜、滤镜等,其中很多功能都是在照片采集后通过图像处理技术实现的。
各大手机厂商不遗余力地升级拍照或摄像功能,为了让用户能存储更多的照片和视频而不断提升手机的存储空间,这些都证明了用户对图像和视频的需求非常强烈,从侧面也反映了图像处理技术的广阔市场前景。
为什么要选用 OpenCV?
OpenCV 之所以大行其道,是因为其简单易用。
作为一个开源的计算机视觉库,OpenCV 由 C++语言编写,读者可以通过阅读源码对算法的实现细节进行学习,可读性好。另外,OpenCV 还实现了很多图像处理和计算机视觉中的通用算法,在 Linux、Windows、Android 和 macOS 等操作系统上均可运行,即一套代码能在多种系统中运行,通用性好。
OpenCV 支持 C++、Python、Java 等语言和 MATLAB 等多种程序接口,在最新版本中还提供了对 C#、Ch、Ruby、Go 语言的支持,不同语言中的接口名称和参数差异较小,用户在不同的开发环境中只需改写少量代码即可使用,一致性好。
OpenCV 在图像处理领域深耕多年,不仅对算法做了很多优化,还针对实用场景做了加速处理,如支持对 CUDA 等硬件的加速。另外,它还可以通过引入 Intel 的 IPP 高性能多媒体函数库获得更高的运行处理速度,高效性好。
OpenCV 大受欢迎还有一个重要的原因,就是当前深度学习和计算机视觉的飞速发展。在计算机视

| OpenCV 4 快速入门:基于 Python 的算法实战 |


觉中进行模型训练和使用时,需要对输入图像做很多预处理和后处理,这些都需要用到 OpenCV 库。OpenCV 中很多算法的实现可以弥补深度学习模型推理耗时的缺陷,在某些特定场景下,OpenCV 中的传统算法可以获得与深度学习方法相差不大的结果,但在执行速度上远胜于深度学习方法,应用性好。
为什么要用 OpenCV 4?
不管什么软件,新版本的出现基本上都是因为对旧版本的代码做了很大力度的重构或增加了很多新特性,已经无法与旧版本兼容。
OpenCV 4 版本升级中废弃了一些旧的 API,对一些枚举类型的名称写法做了修改,对一些函数的参数做了调整,还有一个比较重要的变化就是增加了对 dnn 模块的支持。如果读者目前使用的是 OpenCV 3,那么也不必对这些变化有过多的焦虑,因为 OpenCV 的错误提示清晰易懂,错误定位与修改均比较快速、简单。
此外,建议读者在学习一门新技术时,最好选用较新的软件版本,因为很多软件在发展过程中会逐渐停止对旧版本的支持。
这本书与别的图书有什么不同?
OpenCV 对图像处理和计算机视觉算法做了系统封装,这些算法被划分为很多模块,其中最重要的就是 core 模块(第 3 章)和 imgproc 模块(第 4 章和第 5 章),而很多同类图书的内容就是围绕这两个模块展开的,但是本书内容没有局限于此。
本书以 OpenCV 模块来分章节作为写作思路,在每章的开始都有对模块的导读,导读内容依托OpenCV 源码,讲述了本模块封装的算法函数,对其中的函数和数据结构做了清晰明了的注释,因此, 导读内容既可以为读者学习算法提供帮助,又可以为读者开发查询提供参考。
本书在第 1 章讲述了 C++开发语言和 Python 开发语言,以及 Windows 和 Linux 系统中的OpenCV 开发环境的搭建,只要读者按照案例中的操作步骤执行,就能够顺利地运行 OpenCV 库,不必为开发环境搭建中的各种问题焦头烂额。
core 模块和 imgproc 模块的重要性毋庸置疑,本书也针对这两个模块总结了很多案例,对这两个模块的算法做了透彻的讲解。但对于其他模块,如可视化模块 highgui、视频处理模块 videoio、视频分析模块 video、照片处理模块 photo、2D 特征模块 features2d、相机标定与三维重建模块 calib3d、传统目标检测模块 objdetect、机器学习模块 ml、深度学习模块 dnn,在其他图书中鲜有涉及,而本书对这些模块都做了详细导读和案例讲解。
这种系统化的讲解能够让读者对 OpenCV 有一个全面的认识,也能够让读者有机会了解 OpenCV 的强大功能,为读者在处理特殊需求时提供知识储备。
最后,感谢家人、朋友和出版社对本书写作的支持。希望本书能够给对 OpenCV 和图像处理有需求的读者以帮助,对于书中的疏漏之处,请不吝指教。如果有深度学习和计算机视觉学习需求的读者,敬请关注我的另一本图书《深度学习计算机视觉实战》,该书对深度学习和计算机视觉算法的基础、图像处理基础、计算机视觉案例、TensorFlow Lite,以及基于 TensorFlow Lite 在移动端和 PC 端的部署做了一站式的讲解,在此对您的支持表示衷心的感谢。

目录

第 1 章 OpenCV 快速入门
1.1 OpenCV 介绍
1.1.1 OpenCV 概述
1.1.2 OpenCV 的代码结构
1.1.3 OpenCV 4 的新特性
1.2 OpenCV 开发环境搭建
1.2.1 案例 1:Windows 动态库开发环境搭建
1.2.2 案例 2:Linux 动态库开发环境搭建
1.2.3 案例 3:Python 语言开发环境搭建
1.3 OpenCV 模块介绍
1.3.1 常用模块
1.3.2 扩展模块
1.4 OpenCV 源码编译
1.4.1 案例 4:OpenCV 编译
1.4.2 案例 5:OpenCV 裁剪编译
1.4.3 案例 6:扩展模块 opencv-contrib
1.5 进阶必备:OpenCV 入门参考
1.5.1 OpenCV 版本选择
1.5.2 如何学习 OpenCV
第 2 章 图像读/写模块 imgcodecs
2.1 模块导读
2.2 图像读/写操作
2.2.1 案例 7:图像读取
2.2.2 案例 8:图像保存
2.3 图像编/解码
2.3.1 案例 9:图像编码应用
2.3.2 案例 10:图像解码应用
2.4 进阶必备:聊聊图像格式
第 3 章 核心库模块 core
3.1 模块导读
3.2 基本数据结构
3.2.1 案例 11:Mat 数据结构介绍及 C++调用
3.2.2 案例 12:Python 中的 Mat 对象操作
3.2.3 案例 13:Point 结构
3.2.4 案例 14:Rect 结构
3.2.5 案例 15:Size 结构
3.3 矩阵运算
3.3.1 案例 16:四则运算
3.3.2 案例 17:位运算
3.3.3 案例 18:代数运算
3.3.4 案例 19:比较运算
3.3.5 案例 20:特征值与特征向量
3.3.6 案例 21:生成随机数矩阵
3.4 矩阵变换
3.4.1 案例 22:矩阵转向量
3.4.2 案例 23:通道分离与通道合并
3.4.3 案例 24:图像旋转
3.4.4 案例 25:图像拼接
3.4.5 案例 26:图像边界拓展
3.4.6 案例 27:傅里叶变换
3.5 进阶必备:聊聊图像像素遍历与应用
3.5.1 案例 28:图像像素遍历
3.5.2 案例 29:提取拍照手写签名
第 4 章 图像处理模块 imgproc(一)
4.1 模块导读
4.2 案例 30:颜色空间变换
4.3 案例 31:图像尺寸变换
4.4 基本绘制
4.4.1 案例 32:绘制标记
4.4.2 案例 33:绘制直线
4.4.3 案例 34:绘制矩形
4.4.4 案例 35:绘制圆
4.4.5 案例 36:绘制椭圆
4.4.6 案例 37:绘制文字
4.5 形态学运算
4.5.1 案例 38:腐蚀
4.5.2 案例 39:膨胀
4.5.3 案例 40:其他形态学运算
4.6 图像滤波
4.6.1 案例 41:方框滤波
4.6.2 案例 42:均值滤波
4.6.3 案例 43:高斯滤波
4.6.4 案例 44:双边滤波
4.6.5 案例 45:中值滤波
4.7 边缘检测
4.7.1 案例 46:Sobel 边缘检测
4.7.2 案例 47:Scharr 边缘检测
4.7.3 案例 48:Laplacian 边缘检测
4.7.4 案例 49:Canny 边缘检测
4.8 进阶必备:聊聊颜色模型
第 5 章 图像处理模块 imgproc(二)
5.1 霍夫变换
5.1.1 案例 50:霍夫线变换
5.1.2 案例 51:霍夫圆变换
5.2 案例 52:仿射变换
5.3 案例 53:透视变换
5.4 案例 54:重映射
5.5 阈值化
5.5.1 案例 55:基本阈值化
5.5.2 案例 56:自适应阈值化
5.6 图像金字塔
5.6.1 案例 57:高斯金字塔
5.6.2 案例 58:拉普拉斯金字塔
5.7 直方图
5.7.1 案例 59:直方图计算
5.7.2 案例 60:直方图均衡化
5.8 传统图像分割
5.8.1 案例 61:分水岭算法
5.8.2 案例 62:GrabCut 算法
5.8.3 案例 63:漫水填充算法
5.9 角点检测
5.9.1 案例 64:Harris 角点检测
5.9.2 案例 65:Shi-Tomasi 角点检测
5.9.3 案例 66:亚像素角点检测
5.10 图像轮廓
5.10.1 案例 67:轮廓查找
5.10.2 案例 68:轮廓绘制
5.11 轮廓包裹
5.11.1 案例 69:矩形边框
5.11.2 案例 70:最小外接矩形
5.11.3 案例 71:最小外接圆
5.12 案例 72:多边形填充
5.13 图像拟合
5.13.1 案例 73:直线拟合
5.13.2 案例 74:椭圆拟合
5.13.3 案例 75:多边形拟合
5.14 案例 76:凸包检测
5.15 进阶必备:图像处理算法概述
第 6 章 可视化模块 highgui
6.1 模块导读
6.2 图像窗口
6.2.1 案例 77:创建与销毁窗口
6.2.2 案例 78:图像窗口操作
6.3 图像操作
6.3.1 案例 79:图像显示
6.3.2 案例 80:选取感兴趣区域
6.4 案例 81:键盘操作
6.5 案例 82:鼠标操作
6.6 案例 83:进度条操作
6.7 进阶必备:在 Qt 中使用 OpenCV
第 7 章 视频处理模块 videoio
7.1 模块导读
7.2 视频读取
7.2.1 案例 84:从文件读取视频
7.2.2 案例 85:从设备读取视频
7.3 视频保存
7.3.1 案例 86:从图片文件创建视频
7.3.2 案例 87:保存相机采集的视频
7.4 进阶必备:视频编/解码工具 FFMPEG
第 8 章 视频分析模块 video
8.1 运动分析
8.1.1 模块导读
8.1.2 案例 88:基于 MOG2 与 KNN 算法的运动分析
8.2 目标跟踪
8.2.1 模块导读
8.2.2 案例 89:基于 CamShift 算法的目标跟踪
8.2.3 案例 90:基于 meanShift 算法的目标跟踪
8.2.4 案例 91:稀疏光流法运动目标跟踪···
8.2.5 案例 92:稠密光流法运动目标跟踪
8.3 进阶必备:深度学习光流算法
第 9 章 照片处理模块 photo
9.1 模块导读
9.2 案例 93:基于 OpenCV 的无缝克隆
9.3 案例 94:基于 OpenCV 的图像对比度保留脱色
9.4 案例 95:基于 OpenCV 的图像修复
9.5 案例 96:基于 OpenCV 的 HDR 成像
9.6 图像非真实感渲染
9.6.1 案例 97:边缘保留滤波
9.6.2 案例 98:图像细节增强
9.6.3 案例 99:铅笔素描
9.6.4 案例 100:风格化图像
9.7 进阶必备:照片处理算法概述
第 10 章 2D 特征模块 features2d
10.1 模块导读
10.2 特征点检测
10.2.1 案例 101:SIFT 特征点检测
10.2.2 案例 102:SURF 特征点检测
10.2.3 案例 103:BRISK 特征点检测
10.2.4 案例 104:ORB 特征点检测
10.2.5 案例 105:KAZE 特征点检测
10.2.6 案例 106:AKAZE 特征点检测
10.2.7 案例 107:AGAST 特征点检测
10.2.8 案例 108:FAST 特征点检测
10.3 特征点匹配
10.3.1 案例 109:Brute-Force 特征点匹配
10.3.2 案例 110:FLANN 特征点匹配
10.4 进阶必备:特征点检测算法概述
第 11 章 相机标定与三维重建模块 calib3d
11.1 模块导读
11.2 单应性变换
11.2.1 案例 111:单应性变换矩阵
11.2.2 案例 112:单应性应用之图像插入
11.3 相机标定
11.3.1 案例 113:棋盘角点检测并绘制
11.3.2 案例 114:消除图像失真
11.4 进阶必备:聊聊镜头失真
第 12 章 传统目标检测模块 objdetect
12.1 模块导读
12.2 级联分类器的应用
12.2.1 案例 115:人脸检测
12.2.2 案例 116:人眼检测
12.3 案例 117:HOG 描述符行人检测
12.4 二维码应用
12.4.1 案例 118:二维码检测
12.4.2 案例 119:二维码解码
12.5 进阶必备:聊聊条形码与二维码
第 13 章 机器学习模块 ml
13.1 模块导读
13.2 案例 120:基于 OpenCV 的Logistic回归
13.3 案例 121:基于 OpenCV 的支持向量机
13.4 案例 122:基于 OpenCV 的主成分分析
13.5 进阶必备:机器学习算法概述
第 14 章 深度学习模块 dnn
14.1 模块导读
14.2 风格迁移
14.2.1 深度学习风格迁移
14.2.2 案例 123:OpenCV 实现风格迁移推理
14.3 图像分类
14.3.1 深度学习图像分类
14.3.2 案例 124:基于 TensorFlow 训练
Fashion-MNIST 算法模型
14.3.3 案例 125:OpenCV 实现图像分类推理
14.4 目标检测
14.4.1 深度学习目标检测
14.4.2 案例 126:OpenCV 实现目标检测推理
14.5 图像超分
14.5.1 深度学习图像超分算法
14.5.2 案例 127:OpenCV 实现图像超分推理
14.6 进阶必备:OpenCV 与计算机视觉
14.6.1 计算机视觉的发展
14.6.2 OpenCV 在计算机视觉中的应用

读者评论