【问题标题】:is there any build-in function can do skeletonization in openCV?是否有任何内置函数可以在 openCV 中进行骨架化?
【发布时间】:2016-01-10 18:42:15
【问题描述】:

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

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    来自https://docs.opencv.org/master/df/d2d/group__ximgproc.html#ga37002c6ca80c978edb6ead5d6b39740c

    确保您使用的是 opencv-contrib-python

    thinned = cv2.ximgproc.thinning(cv2.cvtColor(image, cv2.COLOR_RGB2GRAY))
    

    默认情况下,thinningType=cv2.ximgproc.THINNING_ZHANGSUEN。但您也可以像这样执行 cv2.ximgproc.THINNING_GUOHALL:

    thinned = cv2.ximgproc.thinning(cv2.cvtColor(image, cv2.COLOR_RGB2GRAY), thinningType=cv2.ximgproc.THINNING_GUOHALL)
    

    【讨论】:

      【解决方案2】:

      实际上,现在 OpenCV 确实在其扩展图像处理模块中实现了张素骨架化,请参阅https://docs.opencv.org/4.4.0/df/d2d/group__ximgproc.html#ga37002c6ca80c978edb6ead5d6b39740c

      【讨论】:

        【解决方案3】:

        OpenCV 没有skeleton 功能,但您可以制作自己的功能。来自here

        骨架/MAT可以通过两种主要方式制作。

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

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

        Here你可以找到一个使用形态学运算的例子:

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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-18
        • 2012-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多