一文梳理清楚 Python OpenCV 的知识体系

news2024/11/17 21:16:41

本篇文章为你详细罗列 Python OpenCV 的学习路线与重要知识点。核心分成 24 个小节点,全部掌握,OpenCV 入门阶段就顺利通过了。

1. OpenCV 初识与安装

本部分要了解 OpenCV (Open Source Computer Vision Library)的相关简介,OpenCv 可以运行在多平台之上,轻量级而且高效,由一系列 C 函数和少量 C++类构成,提供了 Python、Ruby、MATLAB 等语言的接口,所以在学习的时候,要注意查阅资料的语言实现相关问题。

这个阶段除了安装 OpenCV 相关库以外,建议收藏官方网址,官方手册,官方入门教程,这些都是最佳的学习资料。

模块安装完毕,需要重点测试 OpenCV 是否安装成功,可通过 Python 查询安装版本。

2. OpenCV 模块简介

先从全局上掌握 OpenCV 都由哪些模块组成。例如下面这些模块,你需要找到下述模块的应用场景与简介。

core、imgproc、highgui、calib3d、features2d、contrib、flann、gpu、legacy、ml、objdetect、photo、stitching。

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

3. OpenCV 图像读取,显示,保存

安装 OpenCV 之后,从图像获取开始进行学习,包含本地加载图片,相机获取图片,视频获取,创建图像等内容。

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

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

  1. 图像读取;

  2. 窗口创建;

  3. 图像显示;

  4. 图像保存;

  5. 资源释放。

涉及需要学习的函数有 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()。

如果学习人脸识别,涉及的知识点为:

  • 人脸检测:从图像中找出人脸位置并标识;

  • 人脸识别:从定位到的人脸区域区分出人的姓名或其它信息;

  • 机器学习。

文章来源:一文梳理清楚 Python OpenCV 的知识体系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/687527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见的性能测试缺陷

目录 前言: 性能测试缺陷分类 一、硬件 二、网络 三、应用 四、配置 五、数据库 六、中间件 前言: 性能测试是测试系统在特定条件下的响应时间、并发用户数、吞吐量、内存使用率、CPU利用率、网络延迟等各项指标,以验证其性能是否符…

ActiveMQ消息队列的介绍以及部署

文章目录 1.ActiveMQ消息队列中间件1.1.什么是ActiveMQ1.2.ActiveMQ支持的消息传递类型 2.部署ActiveMQ消息队列2.1.安装JDK环境2.2.部署ActiveMQ消息队列2.3.启动ActiveMQ消息队列2.4.ActiveMQ的端口号2.5.使用ActiveMQ的后台管理系统 ActiveMQ官网:https://active…

官宣!硬核学科“集成电路与机器人应用开发”正式入驻新校区!

好消息!好消息! 集成电路与机器人应用开发学科 强势入驻黑马武汉校区 现在报名(7月1日前)首期班 限时优惠1000元 再送价值千元硬件装备1套! 上周,播妞采访了几位2023届毕业生的就业现状(点击…

11-12 - 信号发送与处理

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中)Linux系统编程训练营 - 目录 文章目录 1. 信号的概念及分类1.1 问题1.2 什么是信号1.3 信号的分类1.3.1 硬件异常信号1.3.2 终端相关信号1.3.3 软件相关信号 1.4 内核与信号1.5 …

组合模式(Composite)

别名 对象树(Object Tree)。 定义 组合是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。 前言 1. 问题 如果应用的核心模型能用树状结构表示,在应用中使用组合模式才…

彭博:为完善Vision Pro体验,苹果扩招数千名新员工

彭博社记者Mark Gurman在最新一期Power On栏目中表示,苹果在WWDC 2023上公布Vision Pro头显,只是该公司进入XR市场的第一步,实际上该设备在明年才会推出完整版。而且据项目相关人士透露,Vision Pro的软件生态还需要很长时间发展。…

软件工程——第6章详细设计知识点整理

本专栏是博主个人笔记,主要目的是利用碎片化的时间来记忆软工知识点,特此声明! 文章目录 1.详细设计阶段的根本目的是? 2.详细设计的任务? 3.详细设计的结果地位?如何衡量程序质量? 4.结构程…

在GitHub上爆火!跳槽必看《Java 面试突击核心讲》知识点笔记整理

不知道大家在面试中有没有这种感觉:面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。 所以针对这种情况,这份…

从0到1精通自动化测试,pytest自动化测试框架,使用自定义标记mark(十一)

一、前言 pytest可以支持自定义标记,自定义标记可以把一个web项目划分多个模块,然后指定模块名称执行 app自动化的时候,如果想android和ios公用一套代码时,也可以使用标记功能,标明哪些是ios用例,哪些是a…

除静电设备给我们的生产带来怎样的便利

一般来说,我们需要根据具体的生产工艺和场景选择适当的静电设备,并按照厂商提供的操作规范正确使用,以确保除静电设备有效发挥作用。 1. 静电消除:静电设备可以帮助消除物体表面的静电电荷,防止静电积聚。静电积聚可能…

UML类图设计

1.普通类,抽象类,接口 普通类 抽象类 接口 1 关联关系 依赖关系 关联:对象之间的引用关系 依赖:耦合性最低,一些静态方法等 2 聚合关系 组合关系 聚合:整体与部分的关系,但是部分可以脱…

英特尔 oneAPI 2023 黑客松大赛:赛道二机器学习:预测淡水质量 实践分享

目录 一、问题描述二、解决方案1、方案简述2、数据分析预处理特征类型处理特征分布分析 3、特征构造4、特征选择过滤法重要性排序 5、模型训练 总结未来工作 一、问题描述 淡水是我们最重要和最稀缺的自然资源之一,仅占地球总水量的 3%。它几乎触及我们日常生活的方…

Python:pyecharts可视化

文章目录 简介Geo地理图绘制折线图区域突出显示横坐标带选择展示 add地图Mapformatter控制value显示在图中显示value值目标html的解析自定义地图js资源原生地图js的解析解决省份上文字不居中的问题 桑基图设置桑基柱的颜色 参考文献 简介 (这是20年的笔记&#xff…

医疗陪诊小程序开发功能有哪些?

医疗陪诊系统开发功能有哪些? 1、注册登录。用户初次使用需使用个人手机号码或者是第三方社交账号进行注册登录,登陆之后填写个人相关信息,姓名、性别、年龄、过往病史、病历等信息,以便医生可以根据患者资料进行初步判断。…

小文智能自定义变量详解

在小文交互场景设计时,有一个特殊功能,叫做自定义变量。有时,根据外呼对象的不同,需要对用户传达不同的内容,比如称呼、地址、公司名称等等。此时,就可以使用小文交互的自定义变量功能来实现对不同用户呼出…

Destination unreachable(Port unreachable) 错误原因和解决办法

Destination unreachable(Port unreachable) 是一条由网络设备(如路由器或防火墙)生成的ICMP(Internet Control Message Protocol)错误消息,用于通知源设备目标设备或端口无法到达。 一、什么是ICMP ICMP(I…

【中危】Guava<32.0.0 存在竞争条件漏洞

漏洞描述 Guava 是 Google 公司开发的开源 Java 代码库,提供常用的Java工具和数据结构。 Guava 1.0 至 31.1 版本中的 FileBackedOutputStream 类使用Java的默认临时目录创建文件,由于创建的文件名容易被攻击者猜测,在 Unix 和 Android Ice…

静电设备在静电处理环节中的原理

静电设备在静电处理环节中发挥着重要的作用。以下是一些常见的静电设备及其作用: 1. 静电消除器:静电消除器通过释放相等数量的正负离子,有效地中和周围环境中的静电荷,从而减少或消除静电引起的问题,例如静电吸附、电…

AI科技的应用革命:改变生活方式、提升人类生产力

人工智能技术的发展和应用,正在对我们的生活方式产生深远的影响。无论是在家庭、工作还是娱乐方面,越来越多的AI工具正在改变我们的习惯、观念和行为。它们为我们提供了更加智能化、个性化和定制化的服务和产品,让我们的生活变得更加便捷、高…

NXP i.MX 8M Plus工业核心板硬件说明书( 四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)

1 硬件资源 创龙科技SOM-TLIMX8MP是一款基于NXP i.MX 8M Plus的四核ARM Cortex-A53 单核ARM Cortex-M7异构多核处理器设计的高端工业核心板,ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM Cortex-M7实时处理单元主频高达800MHz。处理器…