我有这张图片:

opencv - 使用OpenCV检测拐角后绘制一个不相交的多边形-LMLPHP

我正在使用cv2.goodFeaturesToTrack来检测死因裁判官,所以现在我有了这个:

opencv - 使用OpenCV检测拐角后绘制一个不相交的多边形-LMLPHP

角为红色,数字显示goodFeaturesToTrack获得角的顺序。例如,编号为0的角是第一个检测到的角,依此类推...

如果按该顺序连接点,我会得到一个凌乱的多边形,因此我想到了使用给定随机点集的函数,它会以多边形不相交的顺序返回它们。

我找到了this function,它正是我想要的。

但是,尽管多边形不相交,但在此示例中,我没有得到与初始形状相同的形状(我得到了一个非自相交的多边形,但形状不同)。

有谁有办法解决这个问题?我当时在考虑让cv2.goodFeaturesToTrack返回一组有序的点,但是我不知道该怎么做。

非常感谢!

最佳答案

如果要获取多边形,可以对图像进行阈值处理,并使用findContours作为模式来获取外部轮廓,并使用CV_RETR_EXTERNAL提取外部轮廓,并使用CV_CHAIN_APPROX_SIMPLE作为方法。 CV_CHAIN_APPROX_SIMPLE压缩水平,垂直和对角线段,仅保留其端点(请参阅documentation)。

如果要使用角点检测结果并以正确的顺序排列它们以制作多边形,则必须跟踪形状的边界并将这些角点添加到列表中,以便沿着边界找到它们。为此,我认为您可以将findContoursCV_RETR_EXTERNALCV_CHAIN_APPROX_NONE结合使用来获取每个像素。不过,您可能仍未在findContours返回的轮廓上找到所检测到的角点,因此您必须使用接近度阈值。

07-28 02:12
查看更多