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相关知识,请关注我们http://www.mobiletrain.org/

推荐阅读

    linux清空信息的命令?

    linux清空信息的命令?,信息,系统,设备,情况,命令,暂停,状态,发行,数字,文件,L

    Python的技术攻略

    Python的技术攻略,技术,主体,单位,培训,状态,数据,在即,市场份额,信息,玩具

    0基础学Python有多难?

    0基础学Python有多难?,基础,代码,培训,时间,工具,意外,基础知识,下来,工作

    Python变量简介

    Python变量简介,数字,数据,培训,简介,标识符,变量,赋值,开头,表示,汉字,1.Py

    python 报错信息汇总

    python 报错信息汇总,信息,情况,名字,培训,名称,字符,参数,原因,文件,样式,1

    python之nc命令简介

    python之nc命令简介,工具,简介,系统,数据,发行,培训,代理,端口,命令,主机,nc

    Python基础之循环

    Python基础之循环,基础,评论,培训,元素,条件,函数,上限,序列,语句,时候,循环

    python装饰器的概念

    python装饰器的概念,代码,概念,函数,工作,培训,变动,一致,数据,时间,对象,装

    Python 分类技术

    Python 分类技术,技术,数据,分析,概念,产品,价格,房价,系统,培训,连续,分类

    python 函数基础

    python 函数基础,基础,代码,函数,培训,数字,概念,名字,数据,变量,定义,一,函

    Python基础

    Python基础,工具,名字,情况,基础,标准,模块,培训,系统,第三,代码,什么是模块

    Python基础之封装

    Python基础之封装,数据,名字,私有化,名称,情况,基础,入口,对外,概念,培训,一