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,此时既没有错误也没有输出图像。谁能告诉我哪里出错了。
答案 0 :(得分:1)
您可能忘记使用短别名plt
导入模块(请注意,名称可以替换为您想要的名称), AND 调用show()
命令所以在代码中添加以下内容:
import matplotlib.pyplot as plt
plt.imshow()
plt.show()
有关详细信息,请参阅:https://stackoverflow.com/a/3497922/4716013