1、OpenCV-Python 中文教程OpenCV官方教程中文版(For Python)段力辉 译http:/ 年 ? 月 ? 日?为什么使用 ? 作为一种高效简洁的直译式语言非常适合我们用来解决日常工作的问题。而且它简单易学,初学者几个小时就可以基本入门。再加上 ? 和 ? 这两个翅膀,? 对数据分析的能力不逊于?。? 还被称为是胶水语言,有很多软件都?供了 ? 接口。尤其是在 ? 下,可以使用 ? 将不同的软件组成一个工作流,发挥每一个软件自己最大的优势从而完成一个复杂的任务。比如我们可以使用 ? 存储数据,使用 ? 分析数据,使用 ? 展示数据,使用? 进行 ? 建模,使用 ? 构建漂亮的
2、 ?。而 ? 可以将他们联合在一起构建一个强大的工作流。?为什么使用 ?虽然 ? 很强大,而且也有自己的图像处理库 ?,但是相对于? 来讲,它还是弱小很多。跟很多开源软件一样 ? 也?供了完善的 ? 接口,非常便于调用。? 的稳定版是 ?,最新版是 ?,包含了超过 ? 个算法和函数,几乎任何一个能想到的成熟算法都可以通过调用 ? 的函数来实现,超级方便。?为什么是这本书但是非常可惜关于在 ? 下使用 ? 的书,除了这本在线教程之外,仅有一个 ? 多页的书 ? ? ? ? ?(本?书虽然挺好的,但是不够全面,不能让读者完全了解 ? 的现状) 。而我翻译的这本书是来源于 ? 的官方文档,内容全面,
3、对各种的算法的?述简单易懂,而且不拘泥于长篇大论的数学推导,非常适合想使用? 解决实际问题的人,对他们来说具体的数学原理并不重要,重要是能解决实际问题。在国内这本书可以说是第一本 ? 的译作。?本书的时效性本书的编写时针对最新的 ? 的,本版本还没有正式发布(但很稳定) ,其中的内容页非常新,甚至用到了 ? 年才?出的算法。因此本书的时效性上应该是没有问题的。?本书的目标读者本书针的读者是高校学生,科研工作者,图像处理爱好者。对于这些人群,他们往往是带着具体的问题,在苦苦寻找解决方案。为了一个小问题就让他们去学习 ? 这么深奥的语言几乎是不可能的。而 ? 的悄然兴起给他们带来的希望,如果说 ?
4、 是 ? 的话,那 ? 的易用性相当于 ?。他们可以很快的看懂本书的所有代码,并可以学着使用它们来解决自己的问题,同时也能拓展自己的视野。别人经常说 ? 不够快,但是对于上面的这些读者,我相信这不是问题,现在我们日常使用的? 机已经无比强大了,而且绝大多数情况下不会用到实时处理,更不会在嵌入式设备上使用。因此这不是问题。OpenCV-Python段力?2014 年 1 月 30 日1目录目录I? OpenCV101关于关于 OpenCV-Python 教程教程102在在 Windows 上安?上安? OpenCV-Python113在在 Fedora 上安?上安? OpenCV-Python1
5、2IIOpenCV 中的中的 Gui 特性特性134图片图片134.1 ?入图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.2 显示图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144.3 保存图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154.4 总结一下 . . . . . . . . . . . . . . . . . . . . . . .
6、. . . . . . . 155?185.1 用摄像头捕获? . . . . . . . . . . . . . . . . . . . . . . . . . 185.2 从文件中播放? . . . . . . . . . . . . . . . . . . . . . . . . . 195.3 保存? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216OpenCV 中的绘图函数中的绘图函数246.1 画线. . . . . . . . . . . . . . . . . . . . . . . . . . .
7、. . . . . 246.2 画矩形. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246.3 画圆. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.4 画椭圆. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.5 画多?形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.6
8、 在图片上添加文字 . . . . . . . . . . . . . . . . . . . . . . . . . 267把?标当画笔把?标当画笔287.1 简单演示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287.2 ?级一点的示例. . . . . . . . . . . . . . . . . . . . . . . . . . 298用滑动条做?色板用滑动条做?色板328.1 代码示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9、 32III核心操作核心操作362欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍!9图像的基础操作图像的基础操作369.1 获取并修改像素值 . . . . . . . . . . . . . . . . . . . . . . . . . 369.2 获取图像属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389.3 图像 ROI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
10、9.4 拆分及合并图像? . . . . . . . . . . . . . . . . . . . . . . . . 409.5 为图像扩?填充? . . . . . . . . . . . . . . . . . . . . . . . . 4110图像上的算术?算图像上的算术?算4310.1图像加法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4310.2图像混合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4310.3按位?算 . .
11、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4411程序性能检测及优化程序性能检测及优化4711.1使用 OpenCV 检测程序效率. . . . . . . . . . . . . . . . . . . 4711.2OpenCV 中的?优化 . . . . . . . . . . . . . . . . . . . . . . 4811.3在 IPython 中检测程序效率. . . . . . . . . . . . . . . . . . . 4911.4更多 IPython 的?法命令 . . . . . . .
12、. . . . . . . . . . . . . . 5111.5效率优化技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5112OpenCV 中的数学工具中的数学工具53IVOpenCV 中的图像处理中的图像处理5413?色空?换?色空?换5413.1?换?色空? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5413.2物体? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5513
13、.3怎样找到?对?的 HSV 值? . . . . . . . . . . . . . . . . . 5714几何变换几何变换5914.1扩展缩放 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5914.2平移. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6014.3旋?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6214.4仿射变换 . . . . .
14、. . . . . . . . . . . . . . . . . . . . . . . . . 6314.5?变换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6415图像?值图像?值6615.1简单?值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6615.2自?应?值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6815.3Otsu?s 二值化 . . . . .
15、. . . . . . . . . . . . . . . . . . . . . . 7015.4Otsu?s 二值化是如何工作的? . . . . . . . . . . . . . . . . . . 723欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍!16图像平滑图像平滑7516.1平均. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7716.2?斯模糊 . . . . . . . . . . . . . . . . . . . . .
16、 . . . . . . . . . 7816.3中值模糊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7916.4双?滤波 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7917形态学?换形态学?换8117.1腐?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8117.2膨胀. . . . . . . . . . . . . . . . . . . . . . .
17、 . . . . . . . . . 8217.3开?算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8317.4?算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8317.5形态学梯度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8317.6礼帽. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18、. 8417.7?帽. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8417.8形态学操作之?的关系 . . . . . . . . . . . . . . . . . . . . . . . 8418图像梯度图像梯度8718.1Sobel 算子和 Scharr 算子 . . . . . . . . . . . . . . . . . . . . 8718.2Laplacian 算子 . . . . . . . . . . . . . . . . . . . . . . . . . . 8719Canny ?缘检测
19、?缘检测9119.1原理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9119.1.1噪声去? . . . . . . . . . . . . . . . . . . . . . . . . . . 9119.1.2?算图像梯度 . . . . . . . . . . . . . . . . . . . . . . . . 9119.1.3?极大值抑制 . . . . . . . . . . . . . . . . . . . . . . . . 9119.1.4滞后?值 . . . . . . . . . .
20、. . . . . . . . . . . . . . . . 9219.2OpenCV 中的 Canny ?界检测. . . . . . . . . . . . . . . . . 9220图像?字塔图像?字塔9420.1原理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9420.2使用?字塔?图像?合. . . . . . . . . . . . . . . . . . . . . 9621OpenCV 中的?廓中的?廓10121.1初?廓 . . . . . . . . . . . . . . . . .
21、. . . . . . . . . . . . . 10121.1.1什么是?廓 . . . . . . . . . . . . . . . . . . . . . . . . . 10121.1.2怎样绘制?廓 . . . . . . . . . . . . . . . . . . . . . . . . 10121.1.3?廓的?似方法. . . . . . . . . . . . . . . . . . . . . . 10221.2?廓特征 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10421.2.1矩 .
22、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10421.2.2?廓?积 . . . . . . . . . . . . . . . . . . . . . . . . . . 10421.2.3?廓周? . . . . . . . . . . . . . . . . . . . . . . . . . . 1054欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍!21.2.4?廓?似 . . . . . . . . . . . . . . . . . .
23、. . . . . . . . 10521.2.5凸包. . . . . . . . . . . . . . . . . . . . . . . . . . . . 10621.2.6凸性检测 . . . . . . . . . . . . . . . . . . . . . . . . . . 10721.2.7?界矩形 . . . . . . . . . . . . . . . . . . . . . . . . . . 10721.2.8最小外接圆 . . . . . . . . . . . . . . . . . . . . . . . . . 10821.2.9椭圆拟合 . . .
24、. . . . . . . . . . . . . . . . . . . . . . . 10921.2.10 直线拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . 10921.3?廓的性? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11121.3.1?宽比. . . . . . . . . . . . . . . . . . . . . . . . . . . 11121.3.2Extent . . . . . . . . . . . . . . . . .
25、 . . . . . . . . . . 11121.3.3Solidity. . . . . . . . . . . . . . . . . . . . . . . . . . 11121.3.4Equivalent Diameter . . . . . . . . . . . . . . . . . . 11221.3.5方向. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11221.3.6掩模和像素点 . . . . . . . . . . . . . . . . . . . . . . . . 11221.3.7最大值和最
26、小值及它们的位置 . . . . . . . . . . . . . . . 11321.3.8平均?色及平均灰度 . . . . . . . . . . . . . . . . . . . . 11321.3.9极点. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11421.4?廓?更多函数. . . . . . . . . . . . . . . . . . . . . . . . . . 11521.4.1凸缺?. . . . . . . . . . . . . . . . . . . . . . . . . . . 115
27、21.4.2Point Polygon Test . . . . . . . . . . . . . . . . . . . . 11621.4.3形状匹? . . . . . . . . . . . . . . . . . . . . . . . . . . 11721.5?廓的层次结构. . . . . . . . . . . . . . . . . . . . . . . . . . 11921.5.1什么是层次结构. . . . . . . . . . . . . . . . . . . . . . 11921.5.2OpenCV 中层次结构. . . . . . . . . . .
28、. . . . . . . . 12021.5.3?廓检索模式 . . . . . . . . . . . . . . . . . . . . . . . . 12022直方图直方图12422.1直方图的?算?绘制与分析. . . . . . . . . . . . . . . . . . . . 12422.1.1统?直方图 . . . . . . . . . . . . . . . . . . . . . . . . . 12422.1.2绘制直方图 . . . . . . . . . . . . . . . . . . . . . . . . . 12622.1.3使用掩模 . . .
29、. . . . . . . . . . . . . . . . . . . . . . . 12822.2直方图均?化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13022.2.1OpenCV 中的直方图均?化 . . . . . . . . . . . . . . . . 13222.2.2CLAHE 有?对比?应性直方图均?化 . . . . . . . . . . 13222.32D 直方图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13522.
30、3.1介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . 13522.3.2OpenCV 中的 2D 直方图 . . . . . . . . . . . . . . . . . 13522.3.3Numpy 中 2D 直方图 . . . . . . . . . . . . . . . . . . . 13622.3.4绘制 2D 直方图. . . . . . . . . . . . . . . . . . . . . . 13622.4直方图反向投影. . . . . . . . . . . . . . . . . . . . .
31、 . . . . . 1415欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍!22.4.1Numpy 中的算法 . . . . . . . . . . . . . . . . . . . . . 14122.4.2OpenCV 中的反向投影 . . . . . . . . . . . . . . . . . . 14323图像变换图像变换14623.1傅?叶变换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14623.1.1Numpy 中的傅?叶变换 .
32、 . . . . . . . . . . . . . . . . . 14623.1.2OpenCV 中的傅?叶变换 . . . . . . . . . . . . . . . . . 14823.1.3DFT 的性能优化 . . . . . . . . . . . . . . . . . . . . . . 15023.1.4为什么拉普拉斯算子是?滤波器?. . . . . . . . . . . 15224模板匹?模板匹?15524.1OpenCV 中的模板匹? . . . . . . . . . . . . . . . . . . . . . . 15524.2多对?的模板匹? . .
33、. . . . . . . . . . . . . . . . . . . . . . . 15825Hough 直线变换直线变换16025.1OpenCV 中的?夫变换 . . . . . . . . . . . . . . . . . . . . . . 16125.2Probabilistic Hough Transform . . . . . . . . . . . . . . . . 16326Hough 圆环变换圆环变换16527分水岭算法图像分割分水岭算法图像分割16827.1代码. . . . . . . . . . . . . . . . . . . . . . . . .
34、. . . . . . . 16828使用使用 GrabCut 算法?交互式前景提取算法?交互式前景提取17328.1演示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174V图像特征提取与描?图像特征提取与描?17829理?图像特征理?图像特征17829.1?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17830Harris ?点检测?点检测18130.1OpenCV 中的 Harris ?点检测. . . . . . . .
35、. . . . . . . . . 18230.2亚像素级精确度的?点 . . . . . . . . . . . . . . . . . . . . . . . 18431Shi-Tomasi ?点检测?点检测 & ?合于?的图像特征?合于?的图像特征18731.1代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18732介绍介绍 SIFT(Scale-Invariant Feature Transform)19033介绍介绍 SURF(Speeded-Up Robust Features)19533.1Op
36、enCV 中的 SURF . . . . . . . . . . . . . . . . . . . . . . . 1976欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍!34?点检测的?点检测的 FAST 算法算法20034.1使用 FAST 算法?特征提取 . . . . . . . . . . . . . . . . . . . 20034.2机器学习的?点检测器 . . . . . . . . . . . . . . . . . . . . . . . 20134.3?极大值抑制 . . . . . . . . .
37、 . . . . . . . . . . . . . . . . . . . 20234.4总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20234.5OpenCV 中 FAST 特征检测器 . . . . . . . . . . . . . . . . . . 20235BRIEF(Binary Robust Independent Elementary Features) 20535.1OpenCV 中的 BRIEF. . . . . . . . . . . . . . . . . . . . . . 2
38、0536ORB (Oriented FAST and Rotated BRIEF)20736.1OpenCV 中的 ORB 算法 . . . . . . . . . . . . . . . . . . . . . 20837特征匹?特征匹?21137.1Brute-Force 匹?的基础 . . . . . . . . . . . . . . . . . . . . . 21137.2对 ORB 描?符?力匹? . . . . . . . . . . . . . . . . . . . 21237.3匹?器对?是什么? . . . . . . . . . . . . . . . . . . .
39、 . . . . . 21337.4对 SIFT 描?符?力匹?和比值测? . . . . . . . . . . . . . 21337.5FLANN 匹?器 . . . . . . . . . . . . . . . . . . . . . . . . . . 21438使用特征匹?和单应性查找对?使用特征匹?和单应性查找对?21838.1基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21838.2代码. . . . . . . . . . . . . . . . . . . . . . . . . .
40、. . . . . . 218VI?分析?分析22239Meanshift 和和 Camshift22239.1Meanshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22239.2OpenCV 中的 Meanshift. . . . . . . . . . . . . . . . . . . . 22339.3Camshift. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22539.4OpenCV 中的 Camshift . . . . . .
41、 . . . . . . . . . . . . . . . 22640光流光流23140.1光流. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23140.2Lucas-Kanade 法 . . . . . . . . . . . . . . . . . . . . . . . . . 23240.3OpenCV 中的 Lucas-Kanade 光流 . . . . . . . . . . . . . . . 23240.4OpenCV 中的稠密光流 . . . . . . . . . . . . . . . .
42、 . . . . . . 23541背景减?背景减?23841.1基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23841.2BackgroundSubtractorMOG. . . . . . . . . . . . . . . . . 23841.3BackgroundSubtractorMOG2 . . . . . . . . . . . . . . . . . 2397欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍!41.4Back
43、groundSubtractorGMG. . . . . . . . . . . . . . . . . 24041.5结果. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241VII摄像机标定和摄像机标定和 3D ?构?构24342摄像机标定摄像机标定24342.1基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24342.2代码. . . . . . . . . . . . . . . . . . . . . . . . . .
44、 . . . . . . 24442.2.1?置. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24542.2.2标定. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24742.2.3畸变校正 . . . . . . . . . . . . . . . . . . . . . . . . . . 24742.3反向投影?差 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24943姿势估?姿势估?2504
45、3.1基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25043.1.1渲染一个立方体. . . . . . . . . . . . . . . . . . . . . . 25244对极几何?对极几何?Epipolar Geometry?25444.1基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25444.2代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46、 . . . 25545立体图像中的深度地图立体图像中的深度地图25945.1基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25945.2代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259VIII机器学习机器学习26146K ?k-Nearest Neighbour ?26146.1理? K ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26146.1.1
47、OpenCV 中的 kNN . . . . . . . . . . . . . . . . . . . . 26246.2使用 kNN 对手写数字 OCR. . . . . . . . . . . . . . . . . . . 26646.2.1手写数字的 OCR . . . . . . . . . . . . . . . . . . . . . . 26646.2.2英文字母的 OCR . . . . . . . . . . . . . . . . . . . . . . 26847支持向?机支持向?机27047.1理? SVM . . . . . . . . . . . . . . .
48、. . . . . . . . . . . . . . 27047.1.1线性数据分割 . . . . . . . . . . . . . . . . . . . . . . . . 27047.1.2?线性数据分割. . . . . . . . . . . . . . . . . . . . . . 27147.2使用 SVM ?手写数据 OCR . . . . . . . . . . . . . . . . . . 2738欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍!48K 值聚类值聚类27748.1理? K 值聚类
49、 . . . . . . . . . . . . . . . . . . . . . . . . . . . 27748.1.1T 恤大小? . . . . . . . . . . . . . . . . . . . . . . . . 27748.1.2它是如何工作的? . . . . . . . . . . . . . . . . . . . . . 27848.2OpenCV 中的 K 值聚类 . . . . . . . . . . . . . . . . . . . . . . 28148.2.1理?函数的参数. . . . . . . . . . . . . . . . . . .
50、. . . 28148.2.2仅有一个特征的数据 . . . . . . . . . . . . . . . . . . . . 28248.2.3?色?化 . . . . . . . . . . . . . . . . . . . . . . . . . . 286IX?算摄影学?算摄影学28849图像去噪图像去噪28849.1OpenCV 中的图像去噪 . . . . . . . . . . . . . . . . . . . . . . 28949.1.1cv2.fastNlMeansDenoisingColored(). . . . . . . . 29049.1.2cv2.fastN