从边缘形成闭合曲线

时间:2019-07-02 09:27:34

标签: python opencv matplotlib contour canny-operator

我正在尝试像这样在python中制作傅立叶系列动画

https://www.youtube.com/watch?v=QVuU2YCwHjw&app=desktop

因此,要从图像中执行此操作,我需要形成闭合曲线的点的列表。 我可以这样处理简单的图像:

music note

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

但是,如何处理像这样的复杂图像 homer

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

这是我在简单情况下所做的

ret,thresh = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
cts=contours[0].reshape(-1,2)
plt.plot(cts[:,0],cts[:,1])
plt.show()

这会产生一个像这样的漂亮情节(反转不是问题) plot 但这在复杂图像中失败,因为存在多个轮廓

所以基本上是TLDR:我如何结合Canny发现的边缘以形成一条闭合曲线(或其他任何闭合曲线的方法)?

注意:我要求将点按轮廓排列,以便在这样做时

plt.plot(x,y)

我得到了很好的图像轮廓,而不是到处都是交叉的线

感谢您的帮助。

0 个答案:

没有答案