去除轮廓缺陷[OpenCV]

时间:2017-02-09 10:35:16

标签: c++ algorithm opencv

我想概括一下这个问题:How to crop away convexity defects。 描述的情况对我来说很清楚,但我有更复杂的情况:我的轮廓不仅有凹凸,还有凹凸缺陷:

蓝色是我的轮廓,红色是我想要的矩形 - 它一般可以旋转矩形,所以我需要4点矩形轮廓,其面积尽可能接近给定轮廓。我正在寻找关于如何实现这个转换函数的算法,如果用代码说明它会很好。

2 个答案:

答案 0 :(得分:0)

我的想法是在轮廓上执行Hough transform并选择前4个最突出的线作为矩形的边缘。

您应该将轮廓绘制为b& w图像并将其传递给HoughLines。它将返回(r, theta)对的向量,它对极坐标中的检测行进行编码。有关如何将它们转换回笛卡尔坐标的信息,请参见this example

将通过减少“投票数”(即沿线的像素强度之和)来排序这些行。

请注意,HoughLinesP不太适合手头的问题,因为它会返回行,而不是行。

答案 1 :(得分:0)

来自链接答案的方法只能处理基于与凸包的偏差的凸性缺陷,我不认为你可以使用相反的方法来消除“凹陷缺陷”(凸起的凸包并使其他具有缺陷)。

您可以尝试以下方法:

  • 从链接的答案运行解决方案以删除凸缺陷
  • 在生成的特征上,使用不同的精度参数(例如0.0,0.5,1.0 ......)迭代地调用cv::ApproxPoly,直到它接近4边形状。