Python OpenCV 的知识体系
1.OpenCV初识与安装
本部分要了解OpenCV(OpenSourceComputerVisionLibrary)的相关简介,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.霍夫变换
霍夫变换(HoughTransform)是图像处理中的一种特征提取技术,该过程在一个参数空间中,通过计算累计结果的局部最大值,得到一个符合该特定形状的集合,作为霍夫变换的结果。
本部分要学习的函数:
标准霍夫变换、多尺度霍夫变换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(nonfreemodule)Opencv3移除,需调用xfeature2d库;
“SURF”SURF(nonfreemodule)Opencv3移除,需调用xfeature2d库;
“ORB”ORBOpencv3移除,需调用xfeature2d库;
“MSER”MSER;
“GFTT”GoodFeaturesToTrackDetector;
“HARRIS”(配合Harrisdetector);
“Dense”DenseFeatureDetector;
“SimpleBlob”SimpleBlobDetector。
24.OpenCV应用部分之运动物体跟踪与人脸识别
了解何为运动物体检测,OpenCV中常用的运动物体检测方法有背景减法、帧差法、光流法,跟踪算法常用的有meanShift,camShift,粒子滤波,光流法等。
meanShift跟踪算法cv2.meanShift();
CamShift跟踪算法cv2.CamShift()。
如果学习人脸识别,涉及的知识点为:
人脸检测:从图像中找出人脸位置并标识;
人脸识别:从定位到的人脸区域区分出人的姓名或其它信息;
机器学习。
以上内容为大家介绍了PythonOpenCV的知识体系,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/
猜你喜欢LIKE
相关推荐HOT
更多>>python函数中使用for循环
python函数中使用for循环1、在for循环中使用函数需要更长的执行时间,因为每次迭代都会调用该函数。2、如果for循环是在函数内部实现的,那么该...详情>>
2023-11-14 13:53:34python3.1版本的特性有哪些
python3.1中的特性有哪些1、千位数格式化,可以在使用字符串格式化函数时直接完成。在格式化大数时,通常是每三位数放置逗号,使数字更易读(例...详情>>
2023-11-14 13:18:27python__new__()和__init__()有什么区别?
在python中,__new__()不是一定要有,只有继承自object的类才有,该方法可以return父类(通过super(当前类名,cls).__new__())出来的实例,或者直...详情>>
2023-11-14 12:38:55pythonwheel是什么
python的第一个主流打包格式是.egg文件,现在大家庭中又有了一个叫做Wheel(*.whl)的新成员。wheel“被设计成包含PEP376兼容安装(一种非常接近于...详情>>
2023-11-14 11:30:39热门推荐
pythonSymPy求极值
沸python归并排序和快速排序比较
热pythonpartition如何分割字符串
热pythonif-elif-else语句的使用注意
新python函数中使用for循环
python3.1版本的特性有哪些
python__new__()和__init__()有什么区别?
python作为小白该如何抉择python编辑器?
pythonwheel是什么
python如何定义一个函数
pythonpython是什么类型的语言
python怎么传参数
pythonshell是什么
python如何查看对象属性