Python 从边形成闭合曲线

Python 从边形成闭合曲线,python,opencv,matplotlib,contour,canny-operator,Python,Opencv,Matplotlib,Contour,Canny Operator,我正试图用python制作傅里叶级数动画,就像这样 所以要从一张图像上做到这一点,我需要一个形成闭合曲线的点列表。 对于这样的简单图像,我可以这样做: 通过对图像进行阈值化并查找轮廓,默认情况下轮廓对象在曲线路径中具有有序的点 但是,对于这样复杂的图像,我该怎么做呢 我可以使用canny查找轮廓(已经是黑色的),但如何将其转换为近似闭合曲线的形式 对于这个简单的案例,我就是这样做的 ret,thresh=cv2.threshold(img,127255,cv2.thresh\u BINAR

我正试图用python制作傅里叶级数动画,就像这样

所以要从一张图像上做到这一点,我需要一个形成闭合曲线的点列表。 对于这样的简单图像,我可以这样做:

通过对图像进行阈值化并查找轮廓,默认情况下轮廓对象在曲线路径中具有有序的点

但是,对于这样复杂的图像,我该怎么做呢

我可以使用canny查找轮廓(已经是黑色的),但如何将其转换为近似闭合曲线的形式

对于这个简单的案例,我就是这样做的

ret,thresh=cv2.threshold(img,127255,cv2.thresh\u BINARY\u INV)
轮廓,层次=cv2.查找轮廓(阈值,cv2.检索树,cv2.链约无)
cts=轮廓[0]。重塑(-1,2)
plt.plot(cts[:,0],cts[:,1])
plt.show()
这产生了这样一个很好的图(反转不是问题) 但这在复杂图像中失败,因为存在多个轮廓

那么基本上TLDR:我如何连接Canny发现的边以形成一条闭合曲线(或任何其他方法)

注:我要求点按等高线顺序排列,以便

plt.绘图(x,y)
我得到了图像的一个很好的轮廓,而不是到处交叉的线条


非常感谢您的帮助。

您需要计算凸包。看看这个:……还有这个:@ma3oun,但这只会在图像的外部形状周围形成一个外壳,眼睛和所有(来自上图)都不会是曲线的一部分,对吗?