关于python:一篇文章就梳理清楚了-Python-OpenCV-的知识体系

47次阅读

共计 4675 个字符,预计需要花费 12 分钟才能阅读完成。

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

观前揭示,本篇文章波及知识点微小,倡议先珍藏,再缓缓学习。

本篇文章目标将为你具体列举 Python OpenCV 的学习路线与重要知识点。外围分成 24 个小节点,全副把握,OpenCV 入门阶段就顺利通过了。

  1. OpenCV 初识与装置

本局部要理解 OpenCV(Open Source Computer Vision Library)的相干简介,OpenCv 能够运行在多平台之上,轻量级而且高效,由一系列 C 函数和大量 C++ 类形成,提供了 Python、Ruby、MATLAB 等语言的接口,所以在学习的时候,要留神查阅材料的语言实现相干问题。

这个阶段除了装置 OpenCV 相干库以外,倡议珍藏官网网址,官网手册,官网入门教程,这些都是最佳的学习材料。

模块装置结束,须要重点测试 OpenCV 是否装置胜利,可通过 Python 查问装置版本。

  1. OpenCV 模块简介

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

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

整顿每个模块的外围性能,并实现第一个 OpenCV 案例,读取显示图片。

  1. OpenCV 图像读取,显示,保留

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

只有先获取图像之后,能力对图像进行操作解决,信息提取,后果输入,图像显示,图像保留。

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

图像读取;
窗口创立;
图像显示;
图像保留;
资源开释。
波及须要学习的函数有
cv2.imread()、cv2.namedWindow()、cv2.imshow()、cv2.imwrite()、cv2.destroyWindow()、cv2.destroyAllWindows()、cv2.imshow()、cv2.cvtColor()、cv2.imwrite()、cv2.waitKey()。

  1. 摄像头和视频读取,保留

第一个要重点学习 VideoCapture 类,该类罕用的办法有:

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

学习完相干常识之后,能够进行这样一个试验,将一个视频逐帧保留为图片。

  1. OpenCV 罕用数据结构和色彩空间

这部分要把握的类有 Point 类、Rect 类、Size 类、Scalar 类,除此之外,在 Python 中用 numpy 对图像进行操作,所以 numpy 相干的知识点,倡议提前学习,成果更佳。

OpenCV 中罕用的色彩空间有 BGR 色彩空间、HSV/HLS 色彩空间、Lab 色彩空间,这些都须要理解,优先把握 BGR 色彩空间。

  1. OpenCV 罕用绘图函数

把握如下函数的用法,即可纯熟的在 Opencv 中绘制图形。

cv2.line();
cv2.circle();
cv2.rectangle();
cv2.ellipse();
cv2.fillPoly();
cv2.polylines();
cv2.putText()。

  1. OpenCV 界面事件操作之鼠标与滑动条

第一个要把握的函数是鼠标操作音讯回调函数,cv2.setMouseCallback(),滑动条波及两个函数,别离是:cv2.createTrackbar() 和 cv2.getTrackbarPos()。

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

  1. 图像像素、通道拆散与合并

理解图像像素矩阵,相熟图片的像素形成,能够拜访指定像素的像素值,并对其进行批改。

通道拆散函数 cv2.split(),通道合并函数 cv2.merge()。

  1. 图像逻辑运算

把握图像之间的计算,波及函数如下:

cv2.add();
cv2.addWeighted();
cv2.subtract();
cv2.absdiff();
cv2.bitwise_and();
cv2.bitwise_not();
cv2.bitwise_xor()。
还能够钻研图像乘除法。

  1. 图像 ROI 与 mask 掩膜

本局部属于 OpenCV 中的重点常识,第一个为感兴趣区域 ROI,第二个是 mask 掩膜(掩码)操作。

学习 ROI 局部时,还能够学习一下图像的深浅拷贝。

  1. 图像几何变换

图像几何变换仍旧是对根底函数的学习与了解,波及内容如下:

图像缩放 cv2.resize();
图像平移 cv2.warpAffine();
图像旋转 cv2.getRotationMatrix2D();
图像转置 cv2.transpose();
图像镜像 cv2.flip();
图像重映射 cv2.remap()。

  1. 图像滤波

了解什么是滤波,高频与低频滤波,图像滤波函数。

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

方框滤波 cv2.boxFilter();
均值滤波 cv2.blur();
高斯滤波 cv2.GaussianBlur();
中值滤波 cv2.medianBlur();
双边滤波 cv2.bilateralFilter()。

  1. 图像固定阈值与自适应阈值

图像阈值化是图像处理的重要根底局部,利用很宽泛,能够依据灰度差别来宰割图像不同局部,阈值化解决的图像个别为单通道图像 (灰度图),外围要把握的两个函数:

固定阈值:cv2.threshold();
自适应阈值:cv2.adaptiveThreshold()。

  1. 图像收缩侵蚀

收缩、侵蚀属于形态学的操作,是图像基于形态的一系列图像处理操作。

收缩侵蚀是基于高亮局部(红色)操作的,收缩是対高亮局部进行收缩,相似“畛域扩张”,侵蚀是高亮局部被侵蚀,相似“畛域被鲸吞”。

收缩侵蚀的利用和性能:

打消噪声;
宰割独立元素或连贯相邻元素;
寻找图像中的显著极大值、极小值区域;
求图像的梯度;
外围须要把握的函数如下:

收缩 cv2.dilate();
侵蚀 cv2.erode()。
形态学其余操作,开运算、闭运算、顶帽、黑帽、形态学梯度 这些都是基于收缩侵蚀根底之上,利用 cv2.morphologyEx() 函数进行操作。

  1. 边缘检测

边缘检测能够提取图像重要轮廓信息,缩小图像内容,可用于宰割图像、特征提取等操作。

边缘检测的个别步骤:

滤波:滤出噪声対检测边缘的影响;
加强:能够将像素邻域强度变动凸显进去—梯度算子;
检测:阈值办法确定边缘;
罕用边缘检测算子:

Canny 算子,Canny 边缘检测函数 cv2.Canny();
Sobel 算子,Sobel 边缘检测函数 cv2.Sobel();
Scharr 算子,Scharr 边缘检测函数 cv2.Scahrr();
Laplacian 算子,Laplacian 边缘检测函数 cv2.Laplacian()。

  1. 霍夫变换

霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中,通过计算累计后果的部分最大值,失去一个合乎该特定形态的汇合,作为霍夫变换的后果。

本局部要学习的函数:

规范霍夫变换、多尺度霍夫变换 cv2.HoughLines();
累计概率霍夫变换 cv2.HoughLinesP();
霍夫圆变换 cv2.HoughCricles()。

  1. 图像直方图计算及绘制

先把握直方图相干概念,在把握外围函数,最初通过 matplotlib 模块对直方图进行绘制。计算直方图用到的函数是 cv2.calcHist()。

直方图相干利用:

直方图均衡化 cv2.equalizeHist();
直方图比照 cv2.compareHist();
反向投影 cv2.calcBackProject()。

  1. 模板匹配

模板匹配是在一幅图像中寻找与另一幅模板图像最匹配(类似)局部的技术。

外围用到的函数如下:

模板匹配 cv2.matchTemplate();
矩阵归一化 cv2.normalize();
寻找最值 cv2.minMaxLoc()。

  1. 轮廓查找与绘制

外围要了解到在 OpenCV 中,查找轮廓就像在彩色背景中找红色物体。

罕用函数:

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

  1. 轮廓特色属性及利用

这部分内容比拟重要,并且知识点比拟多,核心内容与函数别离如下:

寻找凸包 cv2.convexHull() 与 凸性检测 cv2.isContourConvex();
轮廓外接矩形 cv2.boundingRect();
轮廓最小外接矩形 cv2.minAreaRect();
轮廓最小外接圆 cv2.minEnclosingCircle();
轮廓椭圆拟合 cv2.fitEllipse();
迫近多边形曲线 cv2.approxPolyDP();
计算轮廓面积 cv2.contourArea();
计算轮廓长度 cv2.arcLength();
计算点与轮廓的间隔及地位关系 cv2.pointPolygonTest();
形态匹配 cv2.matchShapes()。

  1. 高级局部 - 分水岭算法及图像修补

把握分水岭算法的原理,把握外围函数 cv2.watershed()。

能够扩大补充图像修补技术及相干函数 cv2.inpaint(),学习结束能够尝试人像祛斑利用。

  1. GrabCut & FloodFill 图像宰割、角点检测

这部分内容都须要一些图像业余背景常识,先把握相干概念常识,在重点学习相干函数。

GrabCut 算法 cv2.grabCut();
漫水填充算法 cv2.floodFill();
Harris 角点检测 cv2.cornerHarris();
Shi-Tomasi 角点检测 cv2.goodFeaturesToTrack();
亚像素角点检测 cv2.cornerSubPix()。

  1. 特色检测与匹配

特色点的检测和匹配是计算机视觉中十分重要的技术之一, 在物体辨认、视觉跟踪、三维重建等畛域都有很宽泛的利用。

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。

  1. OpenCV 利用局部之静止物体跟踪与人脸识别

理解何为静止物体检测,OpenCV 中罕用的静止物体检测办法有背景减法、帧差法、光流法,跟踪算法罕用的有 meanShift,camShift,粒子滤波,光流法 等。

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

人脸检测:从图像中找出人脸地位并标识;
人脸识别:从定位到的人脸区域辨别出人的姓名或其它信息;
机器学习。

正文完
 0