OpenCV 您所在的位置:网站首页 Opencv OpenCV

OpenCV

2022-12-12 10:46| 来源: 网络整理| 查看: 265

OpenCV-Python 中文教程 OpenCV官方教程中文版(For Python) OpenCV2-Python-Tutorials 段力辉 译

说明:搬运自linux公社pdf文件,粗略搬运,仅作个人笔记参考,有时间再美化

部分文件参考:

https://github.com/abidrahmank/OpenCV2-Python-Tutorials

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html

索引目录

 I 走进 OpenCV 10

II OpenCV 中的 Gui 特性 

III 核心操作 

IV OpenCV 中的图像处理(一)

IV OpenCV 中的图像处理(二)

IV OpenCV 中的图像处理(三)

IV OpenCV 中的图像处理(四)

IV OpenCV 中的图像处理(五)

IV OpenCV 中的图像处理(六)

V 图像特征提取与描述(一) 

V 图像特征提取与描述(二) 

VI 视频分析 

VII 摄像机标定和 3D 重构 

VIII 机器学习 

IX 计算摄影学 

 

说明:搬运自linux公社pdf文件,粗略搬运,仅作个人笔记参考,有时间再美化

部分文件参考:

https://github.com/abidrahmank/OpenCV2-Python-Tutorials

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html

 

 

详细目录(译者说明附在末尾)

I 走进 OpenCV 10

1 关于 OpenCV-Python 教程 102 在 在 Windows 上安装 OpenCV-Python 113 在 在 Fedora 上安装 OpenCV-Python 12

 

II OpenCV 中的 Gui 特性 13

4 图片 134.1 读入图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.2 显示图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144.3 保存图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154.4 总结一下 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 视频 185.1 用摄像头捕获视频 . . . . . . . . . . . . . . . . . . . . . . . . . 185.2 从文件中播放视频 . . . . . . . . . . . . . . . . . . . . . . . . . 195.3 保存视频 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 OpenCV 中的绘图函数 246.1 画线 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246.2 画矩形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246.3 画圆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.4 画椭圆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.5 画多边形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.6 在图片上添加文字 . . . . . . . . . . . . . . . . . . . . . . . . . 267 把鼠标当画笔 287.1 简单演示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287.2 高级一点的示例 . . . . . . . . . . . . . . . . . . . . . . . . . . 298 用滑动条做调色板 328.1 代码示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

III 核心操作 36

9 图像的基础操作 369.1 获取并修改像素值 . . . . . . . . . . . . . . . . . . . . . . . . . 369.2 获取图像属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389.3 图像 ROI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399.4 拆分及合并图像通道 . . . . . . . . . . . . . . . . . . . . . . . . 409.5 为图像扩边(填充) . . . . . . . . . . . . . . . . . . . . . . . . 4110 图像上的算术运算 4310.1图像加法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4310.2图像混合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4310.3按位运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4411 程序性能检测及优化 4711.1使用 OpenCV 检测程序效率 . . . . . . . . . . . . . . . . . . . 4711.2OpenCV 中的默认优化 . . . . . . . . . . . . . . . . . . . . . . 4811.3在 IPython 中检测程序效率 . . . . . . . . . . . . . . . . . . . 4911.4更多 IPython 的魔法命令 . . . . . . . . . . . . . . . . . . . . . 5111.5效率优化技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5112OpenCV 中的数学工具 53

IV OpenCV 中的图像处理 54

13 颜色空间转换 5413.1转换颜色空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5413.2物体跟踪 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5513.3怎样找到要跟踪对象的 HSV 值? . . . . . . . . . . . . . . . . . 5714 几何变换 5914.1扩展缩放 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5914.2平移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6014.3旋转 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6214.4仿射变换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6314.5透视变换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6415 图像阈值 6615.1简单阈值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6615.2自适应阈值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6815.3Otsu’s 二值化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 7015.4Otsu’s 二值化是如何工作的? . . . . . . . . . . . . . . . . . . 7216 图像平滑 7516.1平均 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7716.2高斯模糊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7816.3中值模糊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7916.4双边滤波 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7917 形态学转换 8117.1腐蚀 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8117.2膨胀 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8217.3开运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8317.4闭运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8317.5形态学梯度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8317.6礼帽 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8417.7黑帽 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8417.8形态学操作之间的关系 . . . . . . . . . . . . . . . . . . . . . . . 8418 图像梯度 8718.1Sobel 算子和 Scharr 算子 . . . . . . . . . . . . . . . . . . . . 8718.2Laplacian 算子 . . . . . . . . . . . . . . . . . . . . . . . . . . 8719Canny 边缘检测 9119.1原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9119.1.1噪声去除 . . . . . . . . . . . . . . . . . . . . . . . . . . 9119.1.2计算图像梯度 . . . . . . . . . . . . . . . . . . . . . . . . 9119.1.3非极大值抑制 . . . . . . . . . . . . . . . . . . . . . . . . 9119.1.4滞后阈值 . . . . . . . . . . . . . . . . . . . . . . . . . . 9219.2OpenCV 中的 Canny 边界检测 . . . . . . . . . . . . . . . . . 9220 图像金字塔 9420.1原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9420.2使用金字塔进行图像融合 . . . . . . . . . . . . . . . . . . . . . 9621OpenCV 中的轮廓 10121.1初识轮廓 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10121.1.1什么是轮廓 . . . . . . . . . . . . . . . . . . . . . . . . . 10121.1.2怎样绘制轮廓 . . . . . . . . . . . . . . . . . . . . . . . . 10121.1.3轮廓的近似方法 . . . . . . . . . . . . . . . . . . . . . . 10221.2轮廓特征 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10421.2.1矩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10421.2.2轮廓面积 . . . . . . . . . . . . . . . . . . . . . . . . . . 10421.2.3轮廓周长 . . . . . . . . . . . . . . . . . . . . . . . . . . 10521.2.4轮廓近似 . . . . . . . . . . . . . . . . . . . . . . . . . . 10521.2.5凸包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10621.2.6凸性检测 . . . . . . . . . . . . . . . . . . . . . . . . . . 10721.2.7边界矩形 . . . . . . . . . . . . . . . . . . . . . . . . . . 10721.2.8最小外接圆 . . . . . . . . . . . . . . . . . . . . . . . . . 10821.2.9椭圆拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . 10921.2.10 直线拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . 10921.3轮廓的性质 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11121.3.1长宽比 . . . . . . . . . . . . . . . . . . . . . . . . . . . 11121.3.2Extent . . . . . . . . . . . . . . . . . . . . . . . . . . . 11121.3.3Solidity . . . . . . . . . . . . . . . . . . . . . . . . . . 11121.3.4Equivalent Diameter . . . . . . . . . . . . . . . . . . 11221.3.5方向 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11221.3.6掩模和像素点 . . . . . . . . . . . . . . . . . . . . . . . . 11221.3.7最大值和最小值及它们的位置 . . . . . . . . . . . . . . . 11321.3.8平均颜色及平均灰度 . . . . . . . . . . . . . . . . . . . . 11321.3.9极点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11421.4轮廓:更多函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 11521.4.1凸缺陷 . . . . . . . . . . . . . . . . . . . . . . . . . . . 11521.4.2Point Polygon Test . . . . . . . . . . . . . . . . . . . . 11621.4.3形状匹配 . . . . . . . . . . . . . . . . . . . . . . . . . . 11721.5轮廓的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . 11921.5.1什么是层次结构 . . . . . . . . . . . . . . . . . . . . . . 11921.5.2OpenCV 中层次结构 . . . . . . . . . . . . . . . . . . . 12021.5.3轮廓检索模式 . . . . . . . . . . . . . . . . . . . . . . . . 12022 直方图 12422.1直方图的计算,绘制与分析 . . . . . . . . . . . . . . . . . . . . 12422.1.1统计直方图 . . . . . . . . . . . . . . . . . . . . . . . . . 12422.1.2绘制直方图 . . . . . . . . . . . . . . . . . . . . . . . . . 12622.1.3使用掩模 . . . . . . . . . . . . . . . . . . . . . . . . . . 12822.2直方图均衡化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13022.2.1OpenCV 中的直方图均衡化 . . . . . . . . . . . . . . . . 13222.2.2CLAHE 有限对比适应性直方图均衡化 . . . . . . . . . . 13222.32D 直方图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13522.3.1介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13522.3.2OpenCV 中的 2D 直方图 . . . . . . . . . . . . . . . . . 13522.3.3Numpy 中 2D 直方图 . . . . . . . . . . . . . . . . . . . 13622.3.4绘制 2D 直方图 . . . . . . . . . . . . . . . . . . . . . . 13622.4直方图反向投影 . . . . . . . . . . . . . . . . . . . . . . . . . . 14122.4.1Numpy 中的算法 . . . . . . . . . . . . . . . . . . . . . 14122.4.2OpenCV 中的反向投影 . . . . . . . . . . . . . . . . . . 14323 图像变换 14623.1傅里叶变换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14623.1.1Numpy 中的傅里叶变换 . . . . . . . . . . . . . . . . . . 14623.1.2OpenCV 中的傅里叶变换 . . . . . . . . . . . . . . . . . 14823.1.3DFT 的性能优化 . . . . . . . . . . . . . . . . . . . . . . 15023.1.4为什么拉普拉斯算子是高通滤波器? . . . . . . . . . . . 15224 模板匹配 15524.1OpenCV 中的模板匹配 . . . . . . . . . . . . . . . . . . . . . . 15524.2多对象的模板匹配 . . . . . . . . . . . . . . . . . . . . . . . . . 15825Hough 直线变换 16025.1OpenCV 中的霍夫变换 . . . . . . . . . . . . . . . . . . . . . . 16125.2Probabilistic Hough Transform . . . . . . . . . . . . . . . . 16326Hough 圆环变换 16527 分水岭算法图像分割 16827.1代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16828 使用 GrabCut 算法进行交互式前景提取 17328.1演示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

V 图像特征提取与描述 178

29 理解图像特征 17829.1解释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17830Harris 角点检测 18130.1OpenCV 中的 Harris 角点检测 . . . . . . . . . . . . . . . . . 18230.2亚像素级精确度的角点 . . . . . . . . . . . . . . . . . . . . . . . 18431Shi-Tomasi 角点检测 & 适合于跟踪的图像特征 18731.1代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18732 介绍 SIFT(Scale-Invariant Feature Transform) 19033 介绍 SURF(Speeded-Up Robust Features) 19533.1OpenCV 中的 SURF . . . . . . . . . . . . . . . . . . . . . . . 19734 角点检测的 FAST 算法 20034.1使用 FAST 算法进行特征提取 . . . . . . . . . . . . . . . . . . . 20034.2机器学习的角点检测器 . . . . . . . . . . . . . . . . . . . . . . . 20134.3非极大值抑制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20234.4总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20234.5OpenCV 中 FAST 特征检测器 . . . . . . . . . . . . . . . . . . 20235BRIEF(Binary Robust Independent Elementary Features) 20535.1OpenCV 中的 BRIEF . . . . . . . . . . . . . . . . . . . . . . 20536ORB (Oriented FAST and Rotated BRIEF) 20736.1OpenCV 中的 ORB 算法 . . . . . . . . . . . . . . . . . . . . . 20837 特征匹配 21137.1Brute-Force 匹配的基础 . . . . . . . . . . . . . . . . . . . . . 21137.2对 ORB 描述符进行蛮力匹配 . . . . . . . . . . . . . . . . . . . 21237.3匹配器对象是什么? . . . . . . . . . . . . . . . . . . . . . . . . 21337.4对 SIFT 描述符进行蛮力匹配和比值测试 . . . . . . . . . . . . . 21337.5FLANN 匹配器 . . . . . . . . . . . . . . . . . . . . . . . . . . 21438 使用特征匹配和单应性查找对象 21838.1基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21838.2代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

VI 视频分析 222

39Meanshift 和 和 Camshift 22239.1Meanshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22239.2OpenCV 中的 Meanshift . . . . . . . . . . . . . . . . . . . . 22339.3Camshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22539.4OpenCV 中的 Camshift . . . . . . . . . . . . . . . . . . . . . 22640 光流 23140.1光流 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23140.2Lucas-Kanade 法 . . . . . . . . . . . . . . . . . . . . . . . . . 23240.3OpenCV 中的 Lucas-Kanade 光流 . . . . . . . . . . . . . . . 23240.4OpenCV 中的稠密光流 . . . . . . . . . . . . . . . . . . . . . . 23541 背景减除 23841.1基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23841.2BackgroundSubtractorMOG . . . . . . . . . . . . . . . . . 23841.3BackgroundSubtractorMOG2 . . . . . . . . . . . . . . . . . 23941.4BackgroundSubtractorGMG . . . . . . . . . . . . . . . . . 24041.5结果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

VII 摄像机标定和 3D 重构 243

42 摄像机标定 24342.1基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24342.2代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24442.2.1设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24542.2.2标定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24742.2.3畸变校正 . . . . . . . . . . . . . . . . . . . . . . . . . . 24742.3反向投影误差 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24943 姿势估计 25043.1基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25043.1.1渲染一个立方体 . . . . . . . . . . . . . . . . . . . . . . 25244 对极几何(Epipolar Geometry ) 25444.1基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25444.2代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25545 立体图像中的深度地图 25945.1基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25945.2代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

VIII 机器学习 261

46K 近邻(k-Nearest Neighbour ) 26146.1理解 K 近邻 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26146.1.1OpenCV 中的 kNN . . . . . . . . . . . . . . . . . . . . 26246.2使用 kNN 对手写数字 OCR . . . . . . . . . . . . . . . . . . . 26646.2.1手写数字的 OCR . . . . . . . . . . . . . . . . . . . . . . 26646.2.2英文字母的 OCR . . . . . . . . . . . . . . . . . . . . . . 26847 支持向量机 27047.1理解 SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27047.1.1线性数据分割 . . . . . . . . . . . . . . . . . . . . . . . . 27047.1.2非线性数据分割 . . . . . . . . . . . . . . . . . . . . . . 27147.2使用 SVM 进行手写数据 OCR . . . . . . . . . . . . . . . . . . 27348K 值聚类 27748.1理解 K 值聚类 . . . . . . . . . . . . . . . . . . . . . . . . . . . 27748.1.1T 恤大小问题 . . . . . . . . . . . . . . . . . . . . . . . . 27748.1.2它是如何工作的? . . . . . . . . . . . . . . . . . . . . . 27848.2OpenCV 中的 K 值聚类 . . . . . . . . . . . . . . . . . . . . . . 28148.2.1理解函数的参数 . . . . . . . . . . . . . . . . . . . . . . 28148.2.2仅有一个特征的数据 . . . . . . . . . . . . . . . . . . . . 28248.2.3颜色量化 . . . . . . . . . . . . . . . . . . . . . . . . . . 286

IX 计算摄影学 288

49 图像去噪 28849.1OpenCV 中的图像去噪 . . . . . . . . . . . . . . . . . . . . . . 28949.1.1cv2.fastNlMeansDenoisingColored() . . . . . . . . 29049.1.2cv2.fastNlMeansDenoisingMulti() . . . . . . . . . . 29050 图像修补 29450.1基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29450.2代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295X 对象检测 29751 使用 Haar 分类器进行面部检测 29751.1基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29751.2OpenCV 中的 Haar 级联检测 . . . . . . . . . . . . . . . . . . 299

 

为什么翻译此书?段力辉

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(本书虽然挺好的,但是不够全面,不能让读者完全了解 opencv 的现状)。而我翻译的这本书是来源于 OpenCV 的官方文档,内容全面,对各种的算法的描述简单易懂,而且不拘泥于长篇大论的数学推导,非常适合想使用OpenCV 解决实际问题的人,对他们来说具体的数学原理并不重要,重要是能解决实际问题。在国内这本书可以说是第一本 Python_OpenCV 的译作。

 

4 本书的时效性  本书的编写时针对最新的 OpenCV3.0 的,本版本还没有正式发布(但很稳定),其中的内容页非常新,甚至用到了 2012 年才提出的算法。因此本书的时效性上应该是没有问题的。

5 本书的目标读者  本书针的读者是高校学生,科研工作者,图像处理爱好者。对于这些人群,他们往往是带着具体的问题,在苦苦寻找解决方案。为了一个小问题就让他们去学习 C++ 这么深奥的语言几乎是不可能的。而 Python 的悄然兴起给他们带来的希望,如果说 C++ 是 tex 的话,那 Python 的易用性相当于 word。他们可以很快的看懂本书的所有代码,并可以学着使用它们来解决自己的问题,同时也能拓展自己的视野。别人经常说 Python 不够快,但是对于上面的这些读者,我相信这不是问题,现在我们日常使用的PC 机已经无比强大了,而且绝大多数情况下不会用到实时处理,更不会在嵌入式设备上使用。因此这不是问题。

OpenCV-Python段力辉2014 年 1 月 30 日



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有