我有这张图片:
我正在使用cv2.goodFeaturesToTrack
来检测死因裁判官,所以现在我有了这个:
角为红色,数字显示goodFeaturesToTrack
获得角的顺序。例如,编号为0的角是第一个检测到的角,依此类推...
如果按该顺序连接点,我会得到一个凌乱的多边形,因此我想到了使用给定随机点集的函数,它会以多边形不相交的顺序返回它们。
我找到了this function,它正是我想要的。
但是,尽管多边形不相交,但在此示例中,我没有得到与初始形状相同的形状(我得到了一个非自相交的多边形,但形状不同)。
有谁有办法解决这个问题?我当时在考虑让cv2.goodFeaturesToTrack
返回一组有序的点,但是我不知道该怎么做。
非常感谢!
最佳答案
如果要获取多边形,可以对图像进行阈值处理,并使用findContours
作为模式来获取外部轮廓,并使用CV_RETR_EXTERNAL
提取外部轮廓,并使用CV_CHAIN_APPROX_SIMPLE
作为方法。 CV_CHAIN_APPROX_SIMPLE
压缩水平,垂直和对角线段,仅保留其端点(请参阅documentation)。
如果要使用角点检测结果并以正确的顺序排列它们以制作多边形,则必须跟踪形状的边界并将这些角点添加到列表中,以便沿着边界找到它们。为此,我认为您可以将findContours
与CV_RETR_EXTERNAL
和CV_CHAIN_APPROX_NONE
结合使用来获取每个像素。不过,您可能仍未在findContours
返回的轮廓上找到所检测到的角点,因此您必须使用接近度阈值。