请选择 进入手机版 | 继续访问电脑版

石家庄老站长

点击联系客服
客服QQ:509006671 客服微信:mengfeiseo
 找回密码
 立即注册
查看: 15|回复: 0

难以置信!一篇文章梳理了python opencv的知识体系

[复制链接]

1

主题

1

帖子

-7

积分

限制会员

积分
-7
发表于 2021-4-5 14:42:25 | 显示全部楼层 |阅读模式
橡皮,有趣的网络高级网虫。

观战通知,这篇文章知识点巨大,建议先收藏后慢慢学习。

这篇文章的目的将详细列出Python  OpenCV的学习途径和重要知识点。核心分为24个小节点,全部掌握,OpenCV入门阶段顺利通过。

这是一篇学习量很大的文章

1.OpenCV介绍和安装2。OpenCV模块简介3。读取、显示和保存OpenCV图像4。相机和视频阅读,5。OpenCV共同数据结构和色彩空间6。OpenCV通用绘图函数7。用于保存OpenCV接口事件活动的鼠标和滑块8。图像像素,分离和合并通道9。图像逻辑运算10。图像ROI和mask掩码11。图像几何转换12。图像过滤器13。图像固定阈值和自适应阈值14。图像膨胀腐蚀15。边缘检测16。希望转换17。图像直方图计算和绘制18。模板匹配19。轮廓查询及绘制20分水岭算法及图像补丁22。GrabCut  FloodFill图像分割,边缘检测23。特征检测和匹配24。OpenCV应用部分的运动目标跟踪和人脸识别

1. OpenCV  初识与安装

本节概述了可以在多个平台上运行的开放源计算机库(OpenCv)。opencv由一系列C函数和少量C类组成,提供Python、Ruby和MATLAB

在这个阶段,除了安装OpenCV相关库外,最好还收藏官方网站、官方手册、官方入门教程等。

安装模块后,应重点测试OpenCV是否成功安装。您可以通过Python查询确认安装版本。

2. OpenCV  模块简介

首先,全面了解OpenCV由哪些模块组成。例如,在下一个模块中,您需要找到下面介绍的模块的应用程序场景和介绍。

core,3358www.sina.com/,3358www.sina.com/,3358www.sina.com/,3358www.sina.com,3355

整理各模块的核心功能,完成第一个OpenCV案例,读取显示照片。

3. OpenCV  图像读取
ff0c;显示,保存
安装 OpenCV 之后,从图像获取开始进行学习,包含本地加载图片,相机获取图片,视频获取,创建图像等内容。

只有先获取图像之后,才能对图像进行操作处理,信息提取,结果输出,图像显示图像保存

对于一个图像而言,在 OpenCV 中进行读取展示的步骤如下,你可以将其代码进行对应。

[ol]
  • 图像读取;
  • 窗口创建;
  • 图像显示;
  • 图像保存;
  • 资源释放。[/ol]
    涉及需要学习的函数有 cv2.imread()、cv2.namedWindow()、cv2.imshow()、cv2.imwrite()、cv2.destroyWindow()、cv2.destroyAllWindows()、 cv2.imshow()、cv2.cvtColor()、cv2.imwrite()、cv2.waitKey()。

    4. 摄像头和视频读取,保存
    第一个要重点学习 VideoCapture 类,该类常用的方法有:

  • open() 函数;
  • isOpened() 函数;
  • release() 函数;
  • grab() 函数;
  • retrieve() 函数;
  • get() 函数;
  • set() 函数;
    除了读取视频外,还需要掌握 Opencv 提供的 VideoWriter 类,用于保存视频文件。

    学习完相关知识之后,可以进行这样一个实验,将一个视频逐帧保存为图片。

    5. OpenCV 常用数据结构和颜色空间
    这部分要掌握的类有 Point 类、Rect 类、Size 类、Scalar 类,除此之外,在 Python 中用 numpy 对图像进行操作,所以 numpy 相关的知识点,建议提前学习,效果更佳。

    OpenCV 中常用的颜色空间有 BGR 颜色空间、HSV/HLS 颜色空间、Lab 颜色空间,这些都需要了解,优先掌握 BGR 颜色空间。

    6. OpenCV 常用绘图函数
    掌握如下函数的用法,即可熟练的在 Opencv 中绘制图形。

  • cv2.line();
  • cv2.circle();
  • cv2.rectangle();
  • cv2.ellipse();
  • cv2.fillPoly();
  • cv2.polylines();
  • cv2.putText()。
    7. OpenCV 界面事件操作之鼠标与滑动条
    第一个要掌握的函数是鼠标操作消息回调函数,cv2.setMouseCallback() ,滑动条涉及两个函数,分别是:cv2.createTrackbar() 和 cv2.getTrackbarPos()。

    掌握上述内容之后,可以实现两个案例,其一为鼠标在一张图片上拖动框选区域进行截图,其二是通过滑动条让视频倍速播放。

    8. 图像像素、通道分离与合并
    了解图像像素矩阵,熟悉图片的像素构成,可以访问指定像素的像素值,并对其进行修改。

    通道分离函数 cv2.split(),通道合并函数 cv2.merge()。

    9. 图像逻辑运算
    掌握图像之间的计算,涉及函数如下:

  • cv2.add();
  • cv2.addWeighted();
  • cv2.subtract();
  • cv2.absdiff();
  • cv2.bitwise_and();
  • cv2.bitwise_not();
  • cv2.bitwise_xor()。
    还可以研究图像乘除法。

    10. 图像 ROI 与 mask 掩膜
    本部分属于 OpenCV 中的重点知识,第一个为感兴趣区域 ROI,第二个是 mask 掩膜(掩码)操作 。

    学习 ROI 部分时,还可以学习一下图像的深浅拷贝。

    11. 图像几何变换
    图像几何变换依旧是对基础函数的学习与理解,涉及内容如下:

  • 图像缩放 cv2.resize();
  • 图像平移 cv2.warpAffine();
  • 图像旋转 cv2.getRotationMatrix2D();
  • 图像转置 cv2.transpose();
  • 图像镜像 cv2.flip();
  • 图像重映射 cv2.remap()。
    12. 图像滤波
    理解什么是滤波,高频与低频滤波,图像滤波函数。

    线性滤波:方框滤波、均值滤波、高斯滤波,
    非线性滤波:中值滤波、双边滤波,

  • 方框滤波 cv2.boxFilter();
  • 均值滤波 cv2.blur();
  • 高斯滤波 cv2.GaussianBlur();
  • 中值滤波 cv2.medianBlur();
  • 双边滤波 cv2.bilateralFilter()。
    13. 图像固定阈值与自适应阈值
    图像阈值化是图像处理的重要基础部分,应用很广泛,可以根据灰度差异来分割图像不同部分,阈值化处理的图像一般为单通道图像(灰度图),核心要掌握的两个函数:

  • 固定阈值:cv2.threshold();
  • 自适应阈值:cv2.adaptiveThreshold()。
    14. 图像膨胀腐蚀
    膨胀、腐蚀属于形态学的操作,是图像基于形状的一系列图像处理操作。
    膨胀腐蚀是基于高亮部分(白色)操作的,膨胀是対高亮部分进行膨胀,类似“领域扩张”, 腐蚀是高亮部分被腐蚀,类似“领域被蚕食”。

    膨胀腐蚀的应用和功能:

  • 消除噪声;
  • 分割独立元素或连接相邻元素;
  • 寻找图像中的明显极大值、极小值区域;
  • 求图像的梯度;
    核心需要掌握的函数如下:

  • 膨胀 cv2.dilate();
  • 腐蚀 cv2.erode()。
    形态学其他操作,开运算闭运算顶帽黑帽形态学梯度 这些都是基于膨胀腐蚀基础之上,利用 cv2.morphologyEx() 函数进行操作。

    15. 边缘检测
    边缘检测可以提取图像重要轮廓信息,减少图像内容,可用于分割图像、特征提取等操作。

    边缘检测的一般步骤:

  • 滤波: 滤出噪声対检测边缘的影响 ;
  • 增强: 可以将像素邻域强度变化凸显出来—梯度算子 ;
  • 检测: 阈值方法确定边缘 ;
    常用边缘检测算子:

  • Canny 算子,Canny 边缘检测函数 cv2.Canny();
  • Sobel 算子,Sobel 边缘检测函数 cv2.Sobel();
  • Scharr 算子,Scharr 边缘检测函数 cv2.Scahrr() ;
  • Laplacian 算子,Laplacian 边缘检测函数 cv2.Laplacian()。
    16. 霍夫变换
    霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中,通过计算累计结果的局部最大值,得到一个符合该特定形状的集合,作为霍夫变换的结果。

    本部分要学习的函数:

  • 标准霍夫变换、多尺度霍夫变换 cv2.HoughLines() ;
  • 累计概率霍夫变换 cv2.HoughLinesP() ;
  • 霍夫圆变换 cv2.HoughCricles() 。
    17. 图像直方图计算及绘制
    先掌握直方图相关概念,在掌握核心函数,最后通过 matplotlib 模块对直方图进行绘制。计算直方图用到的函数是 cv2.calcHist()。

    直方图相关应用:

  • 直方图均衡化 cv2.equalizeHist();
  • 直方图对比 cv2.compareHist();
  • 反向投影 cv2.calcBackProject()。
    18. 模板匹配
    模板匹配是在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。

    核心用到的函数如下:

  • 模板匹配 cv2.matchTemplate();
  • 矩阵归一化 cv2.normalize();
  • 寻找最值 cv2.minMaxLoc()。
    19. 轮廓查找与绘制
    核心要理解到在 OpenCV 中,查找轮廓就像在黑色背景中找白色物体。

    常用函数:

  • 查找轮廓 cv2.findContours();
  • 绘制轮廓 cv2.drawContours() 。
    最后应该掌握针对每个轮廓进行操作。

    20. 轮廓特征属性及应用
    这部分内容比较重要,并且知识点比较多,核心内容与函数分别如下:

  • 寻找凸包 cv2.convexHull() 与 凸性检测 cv2.isContourConvex();
  • 轮廓外接矩形 cv2.boundingRect();
  • 轮廓最小外接矩形 cv2.minAreaRect();
  • 轮廓最小外接圆 cv2.minEnclosingCircle();
  • 轮廓椭圆拟合 cv2.fitEllipse();
  • 逼近多边形曲线 cv2.approxPolyDP();
  • 计算轮廓面积 cv2.contourArea();
  • 计算轮廓长度 cv2.arcLength();
  • 计算点与轮廓的距离及位置关系 cv2.pointPolygonTest();
  • 形状匹配 cv2.matchShapes()。
    21. 高级部分-分水岭算法及图像修补
    掌握分水岭算法的原理,掌握核心函数 cv2.watershed() 。

    可以扩展补充图像修补技术及相关函数 cv2.inpaint(),学习完毕可以尝试人像祛斑应用。

    22. GrabCut & FloodFill 图像分割、角点检测
    这部分内容都需要一些图像专业背景知识,先掌握相关概念知识,在重点学习相关函数。

  • GrabCut 算法 cv2.grabCut();
  • 漫水填充算法 cv2.floodFill();
  • Harris 角点检测 cv2.cornerHarris();
  • Shi-Tomasi 角点检测 cv2.goodFeaturesToTrack();
  • 亚像素角点检测 cv2.cornerSubPix()。
    23. 特征检测与匹配
    特征点的检测和匹配是计算机视觉中非常重要的技术之一, 在物体识别、视觉跟踪、三维重建等领域都有很广泛的应用。

    OpenCV 提供了如下特征检测方法:

  • “FAST” FastFeatureDetector;
  • “STAR” StarFeatureDetector;
  • “SIFT” SIFT(nonfree module) Opencv3 移除,需调用 xfeature2d 库;
  • “SURF” SURF(nonfree module) Opencv3 移除,需调用 xfeature2d 库;
  • “ORB” ORB Opencv3 移除,需调用 xfeature2d 库;
  • “MSER” MSER;
  • “GFTT” GoodFeaturesToTrackDetector;
  • “HARRIS” (配合 Harris detector);
  • “Dense” DenseFeatureDetector;
  • “SimpleBlob” SimpleBlobDetector。
    24. OpenCV 应用部分之运动物体跟踪与人脸识别
    了解何为运动物体检测,OpenCV 中常用的运动物体检测方法有背景减法帧差法光流法,跟踪算法常用的有 meanShift, camShift,粒子滤波, 光流法 等。

  • meanShift 跟踪算法 cv2.meanShift();
  • CamShift 跟踪算法 cv2.CamShift()。
    如果学习人脸识别,涉及的知识点为:

  • 人脸检测:从图像中找出人脸位置并标识;
  • 人脸识别:从定位到的人脸区域区分出人的姓名或其它信息;
  • 机器学习。
    相关阅读

    [ol]
  • Python 爬虫 100 例教程,超棒的爬虫教程,立即订阅吧
  • Python 游戏世界(更新中,目标文章数 50+,现在订阅,都是老粉)
  • Python 爬虫小课,精彩 9 讲[/ol]


    今天是持续写作的第
    125
    / 200 天。
    如果你想跟博主建立亲密关系,可以关注同名公众号
    梦想橡皮擦
    ,近距离接触一个逗趣的互联网高级网虫。
    博主 ID:梦想橡皮擦,希望大家
    点赞

    评论

    收藏


  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|无图版|手机版|小黑屋|石家庄@IT精英团

    GMT+8, 2021-5-10 16:04 , Processed in 0.070919 second(s), 25 queries .

    Powered by Discuz! X3.4

    © 2001-2021 Comsenz Inc.

    快速回复 返回顶部 返回列表