图像处理——细化骨架

原理这里就不再介绍了
直接上干货

方法一:

使用skimage中的morphology.skeletonize函数
难点在于 我们一般在进行图像处理时使用的是opencv
这玩意和opencv不是完全匹配的 如上述函数的返回值是一个numpy 但值是false/true
需要转换

import cv2
from skimage import morphology
import numpy as np


img = cv2.imread('D:\Desktop\za\\black_white.png', 0)
_,binary = cv2.threshold(img,200,255,cv2.THRESH_BINARY_INV)

for i in range(img.shape[0]):
    for j in range(img.shape[1]):
        if binary[i][j] == 255:
            binary[i][j] = 1
skeleton0 = morphology.skeletonize(binary)
skeleton = skeleton0.astype(np.uint8)*255
cv2.imshow("skeleton.png",skeleton)
cv2.waitKey()

方法二:

参考这篇文章 http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/

import numpy as np
import cv2

im = cv2.imread('D:\Desktop\za\\black_white.png', 0)

ret, im = cv2.threshold(im, 127, 255, cv2.THRESH_BINARY)
element = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))

skel = np.zeros(im.shape, np.uint8)
erode = np.zeros(im.shape, np.uint8)
temp = np.zeros(im.shape, np.uint8)

i = 0
while True:
    cv2.imshow('im %d' % (i), im)
    erode = cv2.erode(im, element)
    temp = cv2.dilate(erode, element)

    # 消失的像素是skeleton的一部分
    temp = cv2.subtract(im, temp)
    cv2.imshow('skeleton part %d' % (i,), temp)
    skel = cv2.bitwise_or(skel, temp)
    im = erode.copy()

    if cv2.countNonZero(im) == 0:
        break;
    i += 1

cv2.imshow('Skeleton', skel)
cv2.waitKey()
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值