是否有内置函数可以进行骨架化?

新手上路,请多包涵

我在 C/C++ 中找到了一些实现,例如 voronoi skeleton 。通常这些代码需要密集循环,这在 python 中是不好的。有没有可以在python中调用的内置骨架函数?

原文由 Wang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 702
2 个回答

OpenCV 没有 骨架 函数,但您可以创建自己的函数。从 骨架化/中轴变换

骨架/MAT 可以通过两种主要方式生产。

第一种是使用某种形态细化,连续从边界侵蚀掉像素(同时保留线段的端点),直到不可能再细化为止,此时剩下的近似于骨架。

另一种方法是先计算图像的 距离变换。然后骨架位于距离变换中的奇异点(即折痕或曲率不连续点)。后一种方法更适合计算 MAT,因为 MAT 与距离变换相同,但骨架上的所有点都被抑制为零。

使用 OpenCV-Python 的骨架化 显示了一个使用形态学操作的示例:

 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()

原文由 Miki 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题