图像轮廓(1)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像轮廓(1)相关的知识,希望对你有一定的参考价值。

参考技术A

边缘检测虽然能够检测出边缘,但是边缘不是连续的,检测到的边缘不是一个整体。 图像轮廓是指将边缘连接起来形成一个整体

cv2.RETR_LIST:对检测到的轮廓不建立等级关系

cv2.RETR_EXTERNAL:只检测外轮廓

cv2.RETE_CCOMP:检测所有轮廓并组织成两级层次结构,上面一层为外边界,下面一层为内控的边界
(注:当含有多个层次结构时,其也只会得到两层的层次结构,而TREE会得到多层)

cv2.RETR_TREE:建立一个等级树结构的轮廓

如何表达轮廓

cv2.CHAIN_APPROX_SIMPLE :压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点元素

cv2.CHAIN_APPROX_NONE:存储所有轮廓点

返回值image:绘制了轮廓的图像
参数:
image:待绘制轮廓的图像,会在image上直接绘制,后续如果image原始图像有用,需要先复制备份
contours:需要绘制的轮廓
contourIdx:一个整数或者0,表示对应的索引号;-1表示绘制全部轮廓

thickness:-1,表示绘制实心轮廓

绘制一副图像中的所有轮廓

逐个显示一幅图像中的边缘信息

使用轮廓绘制功能,提取前景图像

比较两个轮廓最简单的方法是比较二者的轮廓矩。 轮廓矩代表了一个轮廓,一幅图像,一组点集的全部特征 ,矩信息包含了对应对象的不同类型的几何特征,例如大小,位置,角度,形状等。如果两个轮廓的矩一致,那么这两个轮廓就是一致的。

矩特征被广泛应用在 模式识别 图像识别 方面

空间矩(m00表示轮廓的面积)
中心矩(比较不同位置上两个对象的一致性)
归一化中心矩(不仅具有平移不变性,还具有缩放不变性)

array:可以是点集,灰度图像,二值图像
binaryImage: 该参数为True时 ,arry内所有的非零值被处理为1, 也就是二值化 仅在array为图像时有效

oriented:
True,返回值包含正负号,用来表示轮廓是顺时针还是逆时针
False,表示返回的retval是一个绝对值

closed:
True,轮廓封闭
False,轮廓不封闭

Hu矩是归一化中心矩的线性组合。 Hu矩在图像旋转,平移,缩放等操作后,仍能保持矩的不变性 ,所以经常拿Hu矩作为识别图像的特征

其中,hu是表示返回的Hu矩值,m是由参数cv2.moments()计算得到的矩特征值

由于Hu矩的值本身就非常的小,因此这里没有发现两个对象的Hu矩差值的特殊意义

通过Hu矩来判断两个对象的一致性

其中 retval返回左上角顶点的x,y以及宽和高(x,y,w,h)

采用cv2.boundingRect()和cv2.rectangle()绘制矩形包围框

此处返回的[最小外接矩形中心,(宽,高),旋转角度],必须经过下面函数

此处的points值再经过np.int0()取整,可以应用于cv2.drawContours()

retval:最小外包三角形的面积
triangle:最小外包三角形的三个顶点集

注意:三个顶点集的坐标必须转化为整数

返回值:逼近多边形的点集
参数:轮廓,原始轮廓边界点与逼近多边形边界之间的最大距离,True:封闭;False不封闭

DP算法:该算法首先从轮廓中找到距离最远的两个点,并且将两点相连。接下来在轮廓上找到一个距离当前直线最远的点,并且将该点与原有直线连成一个封闭多边形,上述过程不断迭代,将新的找到的距离当前多边形最远的点加入到结果中。当轮廓上所有的点到当前多边形的距离都小于函数cv2.approxPolyDP()的参数epsilon的值时,就停止迭代

构造不同精度的逼近多边形

以上是关于图像轮廓(1)的主要内容,如果未能解决你的问题,请参考以下文章

python opencv图像缺陷比对(轮廓比对)

opencv cv.findContours 函数详解 图像轮廓层级 图像轮廓检索方式详解

图像处理——轮廓检测

matlab怎么将图像处理的轮廓坐标连线起来

从图像中删除所有轮廓

在线会议中人脸面部轮廓图像提取——Dlib库人脸面部轮廓图像特征提取