python - 在 Python 中骨架化图像

标签 python image-processing

import scipy.ndimage.morphology as m
import numpy as np
import cv2

def skeletonize(img):
h1 = np.array([[0, 0, 0],[0, 1, 0],[1, 1, 1]]) 
m1 = np.array([[1, 1, 1],[0, 0, 0],[0, 0, 0]]) 
h2 = np.array([[0, 0, 0],[1, 1, 0],[0, 1, 0]]) 
m2 = np.array([[0, 1, 1],[0, 0, 1],[0, 0, 0]])    
hit_list = [] 
miss_list = []
for k in range(4): 
    hit_list.append(np.rot90(h1, k))
    hit_list.append(np.rot90(h2, k))
    miss_list.append(np.rot90(m1, k))
    miss_list.append(np.rot90(m2, k))    
img = img.copy()
while True:
    last = img
    for hit, miss in zip(hit_list, miss_list): 
        hm = m.binary_hit_or_miss(img, hit, miss) 
        img = np.logical_and(img, np.logical_not(hm)) 
    if np.all(img == last):  
        break
return img

img = cv2.imread("e_5.jpg",0)
ret,img = cv2.threshold(img,127,255,0)
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
img = 255 - img
img = cv2.dilate(img, element, iterations=3)

skel = skeletonize(img)
imshow(skel, cmap="gray", interpolation="nearest")

我一直在尝试这段代码,以便骨架化图像,骨架线之间没有任何间隙。但每当我运行该程序时,都会出现错误“imshow in not Defined”。

我尝试了plt.imshow,此时既没有错误也没有输出图像。谁能告诉我哪里出了问题。

最佳答案

您可能忘记使用短别名 plt 导入模块(请注意,该名称可以替换为您想要的名称),AND 调用 show() 命令,因此将以下内容添加到您的代码中:

import matplotlib.pyplot as plt

plt.imshow()
plt.show()

更多信息请参见:https://stackoverflow.com/a/3497922/4716013

关于python - 在 Python 中骨架化图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026287/

相关文章:

python - Numpy 的平均重复模式数

c++ - 访问多 channel OpenCV Mat 中的元素

c++ - 图像上的 haar 变换

python - 从另一个列表中删除一个列表中对应于 nan 的项目

python - 在 Python 中使用 .append 时,项目会被追加多次。为什么?

python : How to pass file object as function parameter on python script?

python:我怎么总是从csv的第二行开始?

image - 比较不同分辨率的图像

python - OpenCV在不良图像上使用各种方法绘制轮廓

android - Android 上的图像处理