发布网友 发布时间:2022-09-22 20:29
共1个回答
热心网友 时间:2024-12-03 21:35
边缘检测虽然能够检测出边缘,但是边缘不是连续的,检测到的边缘不是一个整体。图像轮廓是指将边缘连接起来形成一个整体
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的值时,就停止迭代
构造不同精度的*近多边形