包含不需要的点的轮廓近似

时间:2013-01-17 10:06:52

标签: opencv polygon shapes approximation

嗨,我有一个多边形问题。我不知道该找什么,所以我决定在这里问一下。下图显示了一个简单的形状。使用OpenCV的findContours()检测轮廓,并通过CV_CHAIN_APPROX_TC89_KCOS(对于那些想知道如何完成此操作的算法)算法进行近似,以便将一行中的所有点汇总为一行。 所以无论如何,一些轮廓包含某种形状,我称之为噪音。下图显示了噪音的含义。红线是轮廓。 (抱歉没有油漆技巧)

enter image description here

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

enter image description here

2 个答案:

答案 0 :(得分:5)

  1. 尝试使用... cvGoodFeatuersToTrack() ....来检测角落,但是有一个标准,即角落应该以相距很远的距离分开......如果角落形成一个群体就会丢弃它们。
  2. 从轮廓中的点列表中选择具有(最高x,最高y),(最高x,最低y),(最低x,最高y)和(最低x,最低y)的点)....现在加入这四点......
  3. 如果角落本身有'噪音',那么尝试使用Hough变换检测图像中的直线...

答案 1 :(得分:1)

我可以提出另一种方法:

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

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