OpenCV-Python 中文教程
OpenCV官方教程中文版(For Python)
段力辉 译
http://privategarden.duapp.com/
为什么翻译此书?
段力辉
年 月 日
为什么使用
作为一种高效简洁的直译式语言非常适合我们用来解决日常
工作的问题。而且它简单易学,初学者几个小时就可以基本入门。再加
上 和 这两个翅膀, 对数据分析的能力不逊于
。 还被称为是胶水语言,有很多软件都提供了 接
口。尤其是在 下,可以使用 将不同的软件组成一个工作流,
发挥每一个软件自己最大的优势从而完成一个复杂的任务。比如我们可以
使用 存储数据,使用 分析数据,使用 展示数据,使用
进行 建模,使用 构建漂亮的 。而 可以将他们
联合在一起构建一个强大的工作流。
为什么使用
虽然 很强大,而且也有自己的图像处理库 ,但是相对于
来讲,它还是弱小很多。跟很多开源软件一样 也提供了
完善的 接口,非常便于调用。 的稳定版是 ,最新版
是 ,包含了超过 个算法和函数,几乎任何一个能想到的成熟算法
都可以通过调用 的函数来实现,超级方便。
为什么是这本书
但是非常可惜关于在 下使用 的书,除了这本在线教
程之外,仅有一个 多页的书 (本
书虽然挺好的,但是不够全面,不能让读者完全了解 的现状)。而
我翻译的这本书是来源于 的官方文档,内容全面,对各种的算
法的描述简单易懂,而且不拘泥于长篇大论的数学推导,非常适合想使用
解决实际问题的人,对他们来说具体的数学原理并不重要,重要
是能解决实际问题。
在国内这本书可以说是第一本 的译作。
本书的时效性
本书的编写时针对最新的 的,本版本还没有正式发布(但
很稳定),其中的内容页非常新,甚至用到了 年才提出的算法。因此
本书的时效性上应该是没有问题的。
本书的目标读者
本书针的读者是高校学生,科研工作者,图像处理爱好者。对于这些
人群,他们往往是带着具体的问题,在苦苦寻找解决方案。为了一个小问
题就让他们去学习 这么深奥的语言几乎是不可能的。而 的悄
然兴起给他们带来的希望,如果说 是 的话,那 的易用性
相当于 。他们可以很快的看懂本书的所有代码,并可以学着使用它们
来解决自己的问题,同时也能拓展自己的视野。别人经常说 不够
快,但是对于上面的这些读者,我相信这不是问题,现在我们日常使用的
机已经无比强大了,而且绝大多数情况下不会用到实时处理,更不会在
嵌入式设备上使用。因此这不是问题。
OpenCV-Python
段力
2014 年 1 月 30 日
1
目录
I OpenCV
1 关于 OpenCV-Python 教程
2 在 Windows 上安 OpenCV-Python
3 在 Fedora 上安 OpenCV-Python
10
10
11
12
II OpenCV 中的 Gui 特性
4 图片
13
13
4.1 入图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2 显示图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.3 保存图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.4 总结一下 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5
18
5.1 用摄像头捕获 . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.2 从文件中播放 . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.3 保存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6 OpenCV 中的绘图函数
24
6.1 画线 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2 画矩形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3 画圆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4 画椭圆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.5 画多形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.6 在图片上添加文字 . . . . . . . . . . . . . . . . . . . . . . . . . 26
7 把标当画笔
28
7.1 简单演示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.2 级一点的示例 . . . . . . . . . . . . . . . . . . . . . . . . . . 29
8 用滑动条做色板
32
8.1 代码示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
III 核心操作
36
2
9 图像的基础操作
36
9.1 获取并修改像素值 . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.2 获取图像属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
9.3 图像 ROI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
9.4 拆分及合并图像 . . . . . . . . . . . . . . . . . . . . . . . . 40
9.5 为图像扩填充 . . . . . . . . . . . . . . . . . . . . . . . . 41
10图像上的算术算
43
10.1图像加法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10.2图像混合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10.3按位算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
11程序性能检测及优化
47
11.1使用 OpenCV 检测程序效率 . . . . . . . . . . . . . . . . . . . 47
11.2OpenCV 中的优化 . . . . . . . . . . . . . . . . . . . . . . 48
11.3在 IPython 中检测程序效率 . . . . . . . . . . . . . . . . . . . 49
11.4更多 IPython 的法命令 . . . . . . . . . . . . . . . . . . . . . 51
11.5效率优化技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
12OpenCV 中的数学工具
53
IV OpenCV 中的图像处理
13色空换
54
54
13.1换色空 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
13.2物体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
13.3怎样找到对的 HSV 值 . . . . . . . . . . . . . . . . . 57
14几何变换
59
14.1扩展缩放 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
14.2平移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
14.3旋 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
14.4仿射变换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
14.5变换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
15图像值
66
15.1简单值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
15.2自应值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
15.3Otsus 二值化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
15.4Otsus 二值化是如何工作的 . . . . . . . . . . . . . . . . . . 72
3
16图像平滑
75
16.1平均 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
16.2斯模糊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
16.3中值模糊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
16.4双滤波 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
17形态学换
81
17.1腐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
17.2膨胀 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
17.3开算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
17.4算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
17.5形态学梯度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
17.6礼帽 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
17.7帽 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
17.8形态学操作之的关系 . . . . . . . . . . . . . . . . . . . . . . . 84
18图像梯度
87
18.1Sobel 算子和 Scharr 算子 . . . . . . . . . . . . . . . . . . . . 87
18.2Laplacian 算子 . . . . . . . . . . . . . . . . . . . . . . . . . . 87
19Canny 缘检测
91
19.1原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
19.1.1噪声去 . . . . . . . . . . . . . . . . . . . . . . . . . . 91
19.1.2算图像梯度 . . . . . . . . . . . . . . . . . . . . . . . . 91
19.1.3极大值抑制 . . . . . . . . . . . . . . . . . . . . . . . . 91
19.1.4滞后值 . . . . . . . . . . . . . . . . . . . . . . . . . . 92
19.2OpenCV 中的 Canny 界检测 . . . . . . . . . . . . . . . . . 92
20图像字塔
94
20.1原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
20.2使用字塔图像合 . . . . . . . . . . . . . . . . . . . . . 96
21OpenCV 中的廓
101
21.1初廓 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
21.1.1什么是廓 . . . . . . . . . . . . . . . . . . . . . . . . . 101
21.1.2怎样绘制廓 . . . . . . . . . . . . . . . . . . . . . . . . 101
21.1.3廓的似方法 . . . . . . . . . . . . . . . . . . . . . . 102
21.2廓特征 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
21.2.1矩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
21.2.2廓积 . . . . . . . . . . . . . . . . . . . . . . . . . . 104
21.2.3廓周 . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4
21.2.4廓似 . . . . . . . . . . . . . . . . . . . . . . . . . . 105
21.2.5凸包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
21.2.6凸性检测 . . . . . . . . . . . . . . . . . . . . . . . . . . 107
21.2.7界矩形 . . . . . . . . . . . . . . . . . . . . . . . . . . 107
21.2.8最小外接圆 . . . . . . . . . . . . . . . . . . . . . . . . . 108
21.2.9椭圆拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . 109
21.2.10直线拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . 109
21.3廓的性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
21.3.1宽比 . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
21.3.2Extent . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
21.3.3Solidity . . . . . . . . . . . . . . . . . . . . . . . . . . 111
21.3.4Equivalent Diameter . . . . . . . . . . . . . . . . . . 112
21.3.5方向 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
21.3.6掩模和像素点 . . . . . . . . . . . . . . . . . . . . . . . . 112
21.3.7最大值和最小值及它们的位置 . . . . . . . . . . . . . . . 113
21.3.8平均色及平均灰度 . . . . . . . . . . . . . . . . . . . . 113
21.3.9极点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
21.4廓更多函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 115
21.4.1凸缺 . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
21.4.2Point Polygon Test . . . . . . . . . . . . . . . . . . . . 116
21.4.3形状匹 . . . . . . . . . . . . . . . . . . . . . . . . . . 117
21.5廓的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . 119
21.5.1什么是层次结构 . . . . . . . . . . . . . . . . . . . . . . 119
21.5.2OpenCV 中层次结构 . . . . . . . . . . . . . . . . . . . 120
21.5.3廓检索模式 . . . . . . . . . . . . . . . . . . . . . . . . 120
22直方图
124
22.1直方图的算绘制与分析 . . . . . . . . . . . . . . . . . . . . 124
22.1.1统直方图 . . . . . . . . . . . . . . . . . . . . . . . . . 124
22.1.2绘制直方图 . . . . . . . . . . . . . . . . . . . . . . . . . 126
22.1.3使用掩模 . . . . . . . . . . . . . . . . . . . . . . . . . . 128
22.2直方图均化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
22.2.1OpenCV 中的直方图均化 . . . . . . . . . . . . . . . . 132
22.2.2CLAHE 有对比应性直方图均化 . . . . . . . . . . 132
22.32D 直方图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
22.3.1介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
22.3.2OpenCV 中的 2D 直方图 . . . . . . . . . . . . . . . . . 135
22.3.3Numpy 中 2D 直方图 . . . . . . . . . . . . . . . . . . . 136
22.3.4绘制 2D 直方图 . . . . . . . . . . . . . . . . . . . . . . 136
22.4直方图反向投影 . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5