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()
关于python - 在 Python 中骨架化图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026287/