【问题标题】:Contour approximation containing undesired points包含不需要的点的轮廓近似
【发布时间】:2013-01-17 10:06:51
【问题描述】:

您好,我遇到了多边形问题。我不知道要找什么,所以我决定在这里问。下图显示了一个简单的形状。使用 OpenCV 的findContours() 检测轮廓,并使用CV_CHAIN_APPROX_TC89_KCOS(对于那些想知道这是如何完成的人)算法进行近似,以便将一条线上的所有点汇总为一条线。 所以无论如何,一些轮廓在形状中包含某种,我称之为噪声。下图显示了噪声的含义。红线是轮廓。 (对不起没有ms的绘画技巧)

我的目标是重新定义形状以近似形状,但要忽略这种“噪音”。所以轮廓应该是这样的。蓝线表示校正后的轮廓。

【问题讨论】:

  • 你检查cv::approxPolyDP了吗?看起来它正在做你想要实现的目标。如果您有陡峭的角度,您可能需要部分应用该函数,而不是一次在整个多边形上应用。
  • 我试试看。我会在几分钟内提供反馈
  • CV::approxPolyDP 运气不好
  • 它会产生什么结果?错误的多边形?
  • 结果依偎在不忽略噪音的情况下

标签: opencv polygon shapes approximation


【解决方案1】:
  1. 尝试使用...cvGoodFeatuersToTrack()....检测角点,但有一个标准,即角点应相隔一定距离...如果角点形成一个簇,则丢弃它们。
  2. 从轮廓中的点列表...选择具有(最高 x,最高 y)、(最高 x,最低 y)、(最低 x,最高 y)和(最低 x,最低 y)的点)....现在加入这四点...
  3. 如果角落本身有“噪点”,请尝试使用 Hough 变换检测图像中的直线...

【讨论】:

  • 这听起来很有用,但是如果我的多边形不是一个简单的矩形呢? L形多边形之类的东西? (我会快速更新我的问题)
  • 90 度角出现“噪音”的可能性有多大?
  • 接近于零。顺便说一句,搜索集群的非常好的方法! +1
  • 然后采用第一种方法...我认为这很容易...!!
  • 好,我会尽快实现
【解决方案2】:

我可以提出另一种方法:

1)您可以使用Hough Line Transform 检测图像上的线条(在使用 Canny 检测轮廓之前)。您不能通过在 HoughLinesP 方法中使用相当大的阈值(“检测”一条线的最小交叉点数)来考虑小线。

2) 找到所有线后,您可以找到它们的交点,正如@DanielHsH 描述的here。因此,您将能够找到所有角落。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2021-06-13
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多