使用 OpenCV 检测角后绘制非相交多边形
Draw a non intersecting polygon after detecting corners with OpenCV
我有这张图片:
我正在使用 cv2.goodFeaturesToTrack
来检测验尸官,所以现在我有这个:
角点为红色,数字表示 goodFeaturesToTrack
得到角点的顺序。例如,编号为 0 的角点是第一个检测到的角点,等等...
如果我要根据那个顺序连接点,我会得到一个凌乱的多边形,所以我想到了使用一个给定一组随机点的函数,它 return 按顺序排列它们多边形不会相交..
我找到了 this function,它完全符合我的要求。
然而,虽然多边形不相交,但对于这个例子,我得到的形状与初始形状不同(我得到的是一个非自相交的多边形,但形状不同)。
有没有人有办法解决这个问题?我正在考虑制作 cv2.goodFeaturesToTrack
return 一组有序的点,但我不知道该怎么做。
非常感谢!
如果要得到多边形,可以用findContours
对图像进行阈值提取外轮廓,用CV_RETR_EXTERNAL
作为获取外轮廓的模式,CV_CHAIN_APPROX_SIMPLE
作为方法。 CV_CHAIN_APPROX_SIMPLE
压缩水平、垂直和对角线段并仅保留它们的端点(参见 documentation)。
如果您想使用角点检测结果并以正确的顺序排列它们来制作多边形,您必须追踪形状的边界并将这些角点添加到列表中,因为您沿着边界找到它们.为此,我认为您可以使用 findContours
与 CV_RETR_EXTERNAL
和 CV_CHAIN_APPROX_NONE
来获取每个像素。不过,您可能无法在 findContours
返回的轮廓上准确找到检测到的角点,因此您必须使用接近阈值。
我有这张图片:
我正在使用 cv2.goodFeaturesToTrack
来检测验尸官,所以现在我有这个:
角点为红色,数字表示 goodFeaturesToTrack
得到角点的顺序。例如,编号为 0 的角点是第一个检测到的角点,等等...
如果我要根据那个顺序连接点,我会得到一个凌乱的多边形,所以我想到了使用一个给定一组随机点的函数,它 return 按顺序排列它们多边形不会相交..
我找到了 this function,它完全符合我的要求。
然而,虽然多边形不相交,但对于这个例子,我得到的形状与初始形状不同(我得到的是一个非自相交的多边形,但形状不同)。
有没有人有办法解决这个问题?我正在考虑制作 cv2.goodFeaturesToTrack
return 一组有序的点,但我不知道该怎么做。
非常感谢!
如果要得到多边形,可以用findContours
对图像进行阈值提取外轮廓,用CV_RETR_EXTERNAL
作为获取外轮廓的模式,CV_CHAIN_APPROX_SIMPLE
作为方法。 CV_CHAIN_APPROX_SIMPLE
压缩水平、垂直和对角线段并仅保留它们的端点(参见 documentation)。
如果您想使用角点检测结果并以正确的顺序排列它们来制作多边形,您必须追踪形状的边界并将这些角点添加到列表中,因为您沿着边界找到它们.为此,我认为您可以使用 findContours
与 CV_RETR_EXTERNAL
和 CV_CHAIN_APPROX_NONE
来获取每个像素。不过,您可能无法在 findContours
返回的轮廓上准确找到检测到的角点,因此您必须使用接近阈值。