logo资料库

OpenCV官方教程中文版(For Python).pdf

第1页 / 共313页
第2页 / 共313页
第3页 / 共313页
第4页 / 共313页
第5页 / 共313页
第6页 / 共313页
第7页 / 共313页
第8页 / 共313页
资料共313页,剩余部分请下载后查看
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
分享到:
收藏