【问题标题】:Opencv divide a contour in two sectionsOpencv将轮廓分为两部分
【发布时间】:2016-03-15 13:29:28
【问题描述】:

我在 Opencv 中有一个带有凸度缺陷的轮廓(红色的那个),我想将该轮廓分成两部分,水平穿过该点,无论如何都要这样做,所以我只是得到标记的轮廓黄色的? Image describing the problem

【问题讨论】:

  • 你的图像总是只有一个凸区域吗?你能举出其他例子吗?
  • 像右图一样画黑线,然后再次找到轮廓。
  • @Miki 它的凸区域比较多,其实是一只手,我只是想要去掉手指,不一定要完美,所以选择Y坐标最大的凸正确的深度会给我带来我感兴趣的观点。
  • @AndreySmorodov 有趣的观察,我会试试的。
  • 看看this answer。一旦你消除了凸面缺陷,你应该有你的结果

标签: opencv contour convexity-defects


【解决方案1】:

这是一个有趣的问题。根据凹点在图像中的分布情况,有一些解决方案。

1)如果这些点没有出现在轮廓的底部(如您的简单示例)。那么这里是一个伪代码。

  1. 找到图像I的凸包C
  2. C 中减去 I,得到凹面区域(如示例中两个白色三角形之间的黑色三角形)。
  3. 该区域中 y 值最小的点为您提供了要切割的水平线。

2)如果这样的点可以出现在任何地方,您需要一种更智能的算法,该算法具有不受水平约束的切割线(因为该差异的 min-y 点将是图像的 min-y) .您可以找到“最里面”的角点,并将它们相互连接。您可以在 y-,x+,y+,x- 方向上递归地切割余数。这实际上取决于您输入的规格。

【讨论】:

    猜你喜欢
    • 2017-05-15
    • 2014-12-12
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多