¿Hay alguna función incorporada que pueda hacer esqueletización en openCV?

Encontré alguna implementación en C / C ++ como voronoi skeleton . Por lo general, esos códigos requieren bucles intensivos, lo que es malo en Python. ¿Hay alguna función de esqueleto incorporada que pueda ser llamada en python?

OpenCV no tiene una función de esqueleto , pero puedes hacer tu propia función. Desde aqui

El esqueleto / MAT se puede producir de dos maneras principales.

El primero es utilizar algún tipo de adelgazamiento morfológico que erosione sucesivamente los píxeles del límite (al tiempo que conserva los puntos finales de los segmentos de línea) hasta que ya no sea posible adelgazar, en cuyo punto lo que queda se aproxima al esqueleto.

El método alternativo es calcular primero la distancia transformada de la imagen. El esqueleto se encuentra a lo largo de las singularidades (es decir, pliegues o discontinuidades de curvatura) en la transformada de distancia. Este último enfoque es más adecuado para calcular el MAT, ya que el MAT es el mismo que la transformada de distancia pero con todos los puntos fuera del esqueleto suprimidos a cero.

Aquí puedes encontrar un ejemplo que utiliza operaciones morfológicas:

import cv2 import numpy as np img = cv2.imread('sofsk.png',0) size = np.size(img) skel = np.zeros(img.shape,np.uint8) ret,img = cv2.threshold(img,127,255,0) element = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3)) done = False while( not done): eroded = cv2.erode(img,element) temp = cv2.dilate(eroded,element) temp = cv2.subtract(img,temp) skel = cv2.bitwise_or(skel,temp) img = eroded.copy() zeros = size - cv2.countNonZero(img) if zeros==size: done = True cv2.imshow("skel",skel) cv2.waitKey(0) cv2.destroyAllWindows()