logo资料库

OpenCV官方教程中文版.pdf

第1页 / 共313页
第2页 / 共313页
第3页 / 共313页
第4页 / 共313页
第5页 / 共313页
第6页 / 共313页
第7页 / 共313页
第8页 / 共313页
资料共313页,剩余部分请下载后查看
1 关于 OpenCV-Python 教程
2 在 Windows 上安装 OpenCV-Python
3 在 Fedora 上安装 OpenCV-Python
4 图片
4.1 读入图像
4.2 显示图像
4.3 保存图像
4.4 总结一下
使用 Matplotlib
5 视频
5.1 用摄像头捕获视频
5.2 从文件中播放视频
5.3 保存视频
6 OpenCV 中的绘图函数
6.1 画线
6.2 画矩形
6.3 画圆
6.4 画椭圆
6.5 画多边形
6.6 在图片上添加文字
7 把鼠标当画笔
7.1 简单演示
7.2 高级一点的示例
8 用滑动条做调色板
9 图像的基础操作
9.1 获取并修改像素值
9.2 获取图像属性
9.3 图像 ROI
9.4 拆分及合并图像通道
9.5 为图像扩边(填充)
10 图像上的算术运算
10.1 图像加法
10.2 图像混合
10.3 按位运算
11 程序性能检测及优化
11.1 使用 OpenCV 检测程序效率
11.2 OpenCV 中的默认优化
11.3 在 IPython 中检测程序效率
12 OpenCV 中的数学工具
13 颜色空间转换
13.1 转换颜色空间
13.2 物体跟踪
14 几何变换
14.1 扩展缩放
14.2 平移
14.3 旋转
14.4 仿射变换
14.5 透视变换
15 图像阈值
15.1 简单阈值
15.2 自适应阈值
15.3 Otsu’s 二值化
16 图像平滑
2D 卷积
16.1 平均
16.2 高斯模糊
16.3 中值模糊
16.4 双边滤波
17 形态学转换
17.1 腐蚀
17.2 膨胀
17.3 开运算
17.4 闭运算
17.5 形态学梯度
17.6 礼帽
17.7 黑帽
17.8 形态学操作之间的关系
结构化元素
18 图像梯度
18.1 Sobel 算子和 Scharr 算子
18.2 Laplacian 算子
19 Canny 边缘检测
19.1 原理
19.2 OpenCV 中的 Canny 边界检测
20 图像金字塔
20.1 原理
20.2 使用金字塔进行图像融合
21 OpenCV 中的轮廓
21.1 初识轮廓
21.1.1 什么是轮廓
21.1.2 怎样绘制轮廓
21.1.3 轮廓的近似方法
21.2 轮廓特征
21.2.1 矩
21.2.2 轮廓面积
21.2.3 轮廓周长
21.2.4 轮廓近似
21.2.5 凸包
21.2.6 凸性检测
21.2.7 边界矩形
21.2.8 最小外接圆
21.2.9 椭圆拟合
21.2.10 直线拟合
21.3 轮廓的性质
21.3.1 长宽比
21.3.2 Extent
21.3.3 Solidity
21.3.4 Equivalent Diameter
21.3.5 方向
21.3.6 掩模和像素点
21.3.7 最大值和最小值及它们的位置
21.3.8 平均颜色及平均灰度
21.3.9 极点
21.4 轮廓:更多函数
21.4.1 凸缺陷
21.4.2 Point Polygon Test
21.4.3 形状匹配
21.5 轮廓的层次结构
21.5.1 什么是层次结构
21.5.2 OpenCV 中层次结构
21.5.3 轮廓检索模式
22 直方图
22.1 直方图的计算,绘制与分析
22.2 直方图均衡化
22.3 2D 直方图
22.4 直方图反向投影
23 图像变换
23.1 傅里叶变换
24 模板匹配
25 Hough 直线变换
26 Hough 圆环变换
27 分水岭算法图像分割
28 使用 GrabCut 算法进行交互式前景提取
29 理解图像特征
30 Harris 角点检测
31 Shi-Tomasi 角点检测 & 适合于跟踪的图像特征
32 介绍 SIFT(Scale-Invariant Feature Transform)
33 介绍 SURF(Speeded-Up Robust Features)
34 角点检测的 FAST 算法
35 BRIEF(Binary Robust Independent Elementary Features)
36 ORB (Oriented FAST and Rotated BRIEF)
37 特征匹配
38 使用特征匹配和单应性查找对象
OpenCV-Python 中文教程 OpenCV官方教程中文版(For Python) 段力辉 译 www.linuxidc.com
欢迎点击这里的链接进入精彩的Linux公社 网站 Linux公社(www.Linuxidc.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种广受关 注和支持的一种操作系统,IDC是互联网数据中心,LinuxIDC就是关于Linux的数据中心。 Linux公社是专业的Linux系统门户网站,实时发布最新Linux资讯,包括Linux、Ubuntu、Fedora、 RedHat、红旗Linux、Linux教程、Linux认证、SUSE Linux、Android、Oracle、Hadoop、CentOS、 MySQL、Apache、Nginx、Tomcat、Python、Java、C语言、OpenStack、集群等技术。 Linux公社(LinuxIDC.com)设置了有一定影响力的Linux专题栏目。 包括:Ubuntu 专题 Fedora 专题 Android 专题 Oracle 专题 Hadoop 专题 RedHat 专题 SUSE 专题 红旗 Linux 专题 CentOS 专题
为什么翻译此书? 段力辉 2014 年 2 月 16 日 1 为什么使用 Python Python 作为一种高效简洁的直译式语言非常适合我们用来解决日常 工作的问题。而且它简单易学,初学者几个小时就可以基本入门。再加 上 Numpy 和 matplotlib 这两个翅膀,Python 对数据分析的能力不逊于 Matlab。Python 还被称为是胶水语言,有很多软件都提供了 Python 接 口。尤其是在 linux 下,可以使用 Python 将不同的软件组成一个工作流, 发挥每一个软件自己最大的优势从而完成一个复杂的任务。比如我们可以 使用 Mysql 存储数据,使用 R 分析数据,使用 matplotlib 展示数据,使用 OpenGL 进行 3D 建模,使用 Qt 构建漂亮的 GUI。而 Python 可以将他们 联合在一起构建一个强大的工作流。 2 为什么使用 Python-OpenCV 虽然 python 很强大,而且也有自己的图像处理库 PIL,但是相对于 OpenCV 来讲,它还是弱小很多。跟很多开源软件一样 OpenCV 也提供了 完善的 python 接口,非常便于调用。OpenCV 的稳定版是 2.4.8,最新版 是 3.0,包含了超过 2500 个算法和函数,几乎任何一个能想到的成熟算法 都可以通过调用 OpenCV 的函数来实现,超级方便。 3 为什么是这本书 但是非常可惜关于在 Python 下使用 OpenCV 的书,除了这本在线教 程之外,仅有一个 100 多页的书 opencv computer vision with python(本 1 www.linuxidc.com
书虽然挺好的,但是不够全面,不能让读者完全了解 opencv 的现状)。而 我翻译的这本书是来源于 OpenCV 的官方文档,内容全面,对各种的算 法的描述简单易懂,而且不拘泥于长篇大论的数学推导,非常适合想使用 OpenCV 解决实际问题的人,对他们来说具体的数学原理并不重要,重要 是能解决实际问题。 在国内这本书可以说是第一本 Python_OpenCV 的译作。 4 本书的时效性 本书的编写时针对最新的 OpenCV3.0 的,本版本还没有正式发布(但 很稳定),其中的内容页非常新,甚至用到了 2012 年才提出的算法。因此 本书的时效性上应该是没有问题的。 5 本书的目标读者 本书针的读者是高校学生,科研工作者,图像处理爱好者。对于这些 人群,他们往往是带着具体的问题,在苦苦寻找解决方案。为了一个小问 题就让他们去学习 C++ 这么深奥的语言几乎是不可能的。而 Python 的悄 然兴起给他们带来的希望,如果说 C++ 是 tex 的话,那 Python 的易用性 相当于 word。他们可以很快的看懂本书的所有代码,并可以学着使用它们 来解决自己的问题,同时也能拓展自己的视野。别人经常说 Python 不够 快,但是对于上面的这些读者,我相信这不是问题,现在我们日常使用的 PC 机已经无比强大了,而且绝大多数情况下不会用到实时处理,更不会在 嵌入式设备上使用。因此这不是问题。 www.linuxidc.com
OpenCV-Python 段力辉 2014 年 1 月 30 日 1 www.linuxidc.com
目录 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 www.linuxidc.com
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.3Otsu’s 二值化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 15.4Otsu’s 二值化是如何工作的? . . . . . . . . . . . . . . . . . . 72 3 www.linuxidc.com
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 www.linuxidc.com
分享到:
收藏