百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Python OpenCV 的知识体系梳理 python+opencv教程

liuian 2024-12-23 12:08 47 浏览

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 中进行读取展示的步骤如下,你可以将其代码进行对应。

图像读取;

窗口创建;

图像显示;

图像保存;

资源释放。

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

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

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

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

机器学习。

————————————————

版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/hihell/article/details/115421584

相关推荐

qq浏览器手机版下载(qq浏览器手机版下载官网)

你是不是没有下载完整的软件,如果你一直用手机试验不成功的话,你可以尝试用电脑进行安装,首先,既然你喜欢在手机上使用qq浏览器,那么我们电脑也用qq浏览器,我平时也喜欢用qq浏览器,看新闻的话,添加书签...

qq电子邮件的格式怎么写的(qq电子邮件的一般格式)

1、常用格式:最常用的就是自己的“qq号+@qq.com”就好了2、英文邮箱账号:“英文或者数字@qq.com”3、foxmail邮箱:开通需要去注册,在格式后方加上“@foxmail.co...

显卡怎么区分级别(显卡等级怎么看)

1、以性能来分,4650以下为入门级(9600以下),4670以上,4830、4850等为中级(9600以上,GTX260以下),4870、5750、4890、5770等为高级(GTX260+以上)...

360手机杀毒完整版下载安装(手机360杀毒 免费下载)

对每台电脑的影响不同。常见的有:某些设置无法使用、自动更新出现问题,系统升级时升级不了、电脑运行速度变慢等。实际上win10系统自带的杀毒软件“Windows安全中心”的防御和杀毒能力非常突出,而且免...

回收站清空了怎么恢复文件(还原回收站被删除文件)

如果你清空了回收站的文件,别担心,还有多种方式可以尝试恢复这些文件。首先,如果你刚刚清空回收站且没有进行任何其他的操作,可以尝试使用撤销还原法来恢复文件。只需同时按住快捷键【Ctrl+Z】即可完成撤销...

安卓adb驱动免费版(adb手机驱动)

1.下载ADB驱动程序你可以从Android官方网站下载最新版的ADB驱动,或者从第三方网站上下载。在下载后将文件解压到你想要的目录。2.安装ADB驱动程序运行驱动程序的安装程序,...

两台电脑连接重装系统(两台电脑怎么给另一台电脑重装系统)

如果电脑C盘确实安装了两个系统,建议格式化C盘重装系统。如果不知怎么有两个启动选项可以将其删除右击我的电脑/属性/高级/启动和故障恢复中的设置/在“默认操作系统”的下拉列表中选择你要使用的操作系统,然...

win10无法连接网络打印机(win10连不上打印机显示网络错误)
  • win10无法连接网络打印机(win10连不上打印机显示网络错误)
  • win10无法连接网络打印机(win10连不上打印机显示网络错误)
  • win10无法连接网络打印机(win10连不上打印机显示网络错误)
  • win10无法连接网络打印机(win10连不上打印机显示网络错误)
教务网络管理系统入口(内蒙古民族大学教务网络管理系统入口)
教务网络管理系统入口(内蒙古民族大学教务网络管理系统入口)

钟山学院官网http://www.zscollege.com/钟山学院教务处http://jwc.njzs.edu.cn/钟山学院教务处学生登录入口http://jwgl.zscollege.com/jwweb/(网站左侧)三江学院的...

2025-12-28 02:05 liuian

win10系统下载32位纯净版(下载windows10纯净版)

纯净版就是最干净的版本,也叫最绿色的版本。像WIN系统通常会有纯净版、快速安装版、精简版、定制版、Ghost版等。纯净版就是只配套提供了最最基础的软件和功能,一些高级一点的功能或软件需要自己另外安装,...

联想主板进入bios的方法(联想台式机怎么进入bios)

联想电脑开机一直按F2,就可以进入BIOS,部分机型需要按Fn+F2。BIOS是英文BasicInputOutputSystem的缩略词,直译过来后中文名称就是基本输入输出系统,在IBMPC兼...

win7升级win10数据还在吗(win7升级成win10上面的数据还有吗)

在升级Windows7到Windows10的过程中,可以选择保留个人文件和应用程序,但是不保证所有数据都能完全保留。如果您选择“保留个人文件和应用程序”选项,Windows10安装...

win7怎么升级到windows10(win7怎么升级到win11系统)

Win7不够8G内存怎么升级到win10。朋友也就是说你现在在使用win7系统。内存不够8G那就是4G的呀。Windows10最低配置的内存就是4G。所以说你要把windows7升级为window...

手机桌面图标隐藏了怎么弄出来

答:手机恢复隐藏的手机图标操作步骤如下:1.首先将手机解锁后进入华为手机的桌面,双指按住桌面的上方和下方,然后由内向外滑动屏幕,呼出隐藏空间。2.在新出现的页面中,可以查看已经被隐藏的应用。3.在列出...

lol游戏崩溃是什么原因(lol游戏崩溃的原因)

1.试试重启电脑,或者是重新启动游戏。2.如果卡死了可以稍微等一下,会自动恢复。3.卡死的情况如果可以打开任务管理器,查看cpu、显卡、内存的占用率,如果异常查看对应的驱动是否正常,如果占用率都正常温...