我想概括一下这个问题:How to crop away convexity defects。 描述的情况对我来说很清楚,但我有更复杂的情况:我的轮廓不仅有凹凸,还有凹凸缺陷:
蓝色是我的轮廓,红色是我想要的矩形 - 它一般可以旋转矩形,所以我需要4点矩形轮廓,其面积尽可能接近给定轮廓。我正在寻找关于如何实现这个转换函数的算法,如果用代码说明它会很好。
答案 0 :(得分:0)
我的想法是在轮廓上执行Hough transform并选择前4个最突出的线作为矩形的边缘。
您应该将轮廓绘制为b& w图像并将其传递给HoughLines。它将返回(r, theta)
对的向量,它对极坐标中的检测行进行编码。有关如何将它们转换回笛卡尔坐标的信息,请参见this example。
将通过减少“投票数”(即沿线的像素强度之和)来排序这些行。
请注意,HoughLinesP
不太适合手头的问题,因为它会返回段行,而不是行。
答案 1 :(得分:0)
来自链接答案的方法只能处理基于与凸包的偏差的凸性缺陷,我不认为你可以使用相反的方法来消除“凹陷缺陷”(凸起的凸包并使其他具有缺陷)。
您可以尝试以下方法:
cv::ApproxPoly
,直到它接近4边形状。