Я пытаюсь сделать анимацию серии Фурье на питоне, как это
https://www.youtube.com/watch?v=QVuU2YCwHjw&app=desktop
Итак, чтобы сделать это из изображения, мне нужен список точек, которые образуют замкнутую кривую.
Я могу сделать это для простых изображений, таких как:
путем установки порога изображения и нахождения контура объект контура по умолчанию имеет точки, упорядоченные по траектории кривой.
Тем не менее, как мне сделать это для сложных изображений, как это
Я могу использовать 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()
Это дает хороший сюжет, подобный этому (инверсия не проблема)
но это не удается в сложных изображениях, так как есть несколько контуров
Так что в основном TLDR: Как мне соединить ребра, найденные Canny, чтобы сформировать одну замкнутую кривую (или любой другой метод для этого)?
ПРИМЕЧАНИЕ: я требую, чтобы точки были упорядочены, как в контуре, чтобы, когда я делаю
plt.plot(x,y)
Я получаю хороший контур изображения, а не линии, пересекающиеся повсюду
Любая помощь приветствуется.