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