凸包

作者: 长歌行夜一 | 来源:发表于2020-09-06 12:15 被阅读0次

逼近多边形是轮廓的高度近似,但是有时候我们希望使用一个多边形的凸包来简化它。凸包跟逼近多边形很像,只不过它是物体最外层的凸多边形(轮廓在凸多边形内部;凸包仅有轮廓上的点组成;凸包上,任意连续的三个点的内角小于180度)。

轮廓和凸包之间的部分被称为凸缺陷(Converxity Defect),凸缺陷能够用来处理手势识别等问题。

1.获取凸包

hull = cv2.convexHull(points[,clockwise[, returnPoints]])

式中返回值hull是凸包角点。式中参数如下:

points: 轮廓;

clockwise: 布尔类型。为True时,凸包角点按顺时针排列;

returnPoints:布尔类型。默认值是True,函数返回凸包角点的x/y轴坐标;当为False,函数返回凸包角点的索引。

例如:

代码 获取五角星的凸包

2.凸缺陷

凸包与轮廓之间的部分,称为凸缺陷。在OpenCV中使用函数cv2.convexityDefects()获取凸缺陷,雅阁时:

convexityDefects = cv2.convexityDefects(contours, convexhull)

返回值是一个叔祖,每一行包含的值是【起点,终点,轮廓上距离凸包最远的点,最远点到凸包的近似距离】。contours是轮廓;要注意:在获取凸包convexhull时,函数v2.convexHull()的参数returnPoints必须是False,以获取角点索引。

例如:

代码 用点标出凸缺陷,位于五角星夹角处。

3.几何学测试

3.1测试轮廓是否是凸形

retval = cv2.isContourConvex(contours)

返回True表示是凸形,否则,不是凸形;

3.2点到轮廓的距离

在OpenCV中,函数cv2.pointPolygonTest()被用来计算点到多边形(轮廓的)最短距离(也就是垂线距离)。这个计算过程又称点和多边形的关系测试。

retval = cv2.pointPolygonTest(contour, pt, measureDist)

参数contour: 轮廓;

       pt: 待判定的点;

       measureDist:为布尔值,表示距离的判定方式。当为True时,表示点到轮廓的距离。若返回值retval是正值,表示在轮廓内部;为负值,表示在轮廓外部;为0,表示在轮廓上。当值为False, 表示不计算距离,只返回-1、0、1中的一个,返回1,表示在轮廓内部。

代码 运行结果,点A在五角星内部,距离为1

相关文章

  • 凸包

    向量的叉乘就是由该两个向量所组成的平行四边形的面积(x1y2-x2y1).这个凸包不是太懂.先留模板在此这个是水平...

  • 凸包

    凸包最常用的凸包算法是Graham扫描法和Jarvis步进法Graham's Scan法这个算法是由数学大师葛立恒...

  • 凸包

    convexHull 实例

  • 凸包

    逼近多边形是轮廓的高度近似,但是有时候我们希望使用一个多边形的凸包来简化它。凸包跟逼近多边形很像,只不过它是物体最...

  • Python3 趣味系列题8 ------ 凸包动态绘制

    本文介绍利用Graham Scan算法获得凸包(平面凸包),并动态展示凸包的形成过程。下面用比较通俗的语言,介绍下...

  • 算法复习-geometric algo

    convex hull 凸包-video25&video26 凸包算法剖析https://cyw3.github....

  • 图像轮廓(2)

    1. 凸包 凸缺陷可以用来处理手势识别问题 points:轮廓clockwise:True:凸包按顺时针方向排列;...

  • 3,4 仿射,凸,凸锥

    仿射组合凸组合凸锥组合组合后的所有点组成的称为仿射\凸\凸锥包

  • 提取平面点云的轮廓

    一. 基于凸包的凹点挖掘算法: 1. 提取点云的凸包 2. 计算凸包每条边的顶点的点密度(即该点 K 个临...

  • 凸包(andrew)

    将所有点按照x为first,y为second从小到大排序,(可以先删除相同点)得到p数组,将p1p2放到凸包中,从...

网友评论

      本文标题:凸包

      本文链接:https://www.haomeiwen.com/subject/dhcwjktx.html