二进制图像的细化:python
我正试图勾勒出一个形象。使用这段代码,在某种程度上,图像显示出了我想要的效果。但图像中仍然存在一些问题。我能在两条线之间找到一些空隙。是否有更好的算法来消除这些漏洞。我已经附加了给定代码的输入和输出二进制图像的细化:python,python,opencv,image-processing,Python,Opencv,Image Processing,我正试图勾勒出一个形象。使用这段代码,在某种程度上,图像显示出了我想要的效果。但图像中仍然存在一些问题。我能在两条线之间找到一些空隙。是否有更好的算法来消除这些漏洞。我已经附加了给定代码的输入和输出 import numpy as np import cv2 img = cv2.imread("e_5.jpg",0) size = np.size(img) skel = np.zeros(img.shape,np.uint8) ret,img = cv2.threshold(img,127,
import numpy as np
import cv2
img = cv2.imread("e_5.jpg",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))
img = 255 - img
img = cv2.dilate(img, element, iterations=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
您的代码中存在一些缩进问题,特别是如果零==size应该在while循环中,那么您的
应该在while循环中。您也可以显示中间步骤的图像吗?这样我们就可以准确地分析哪一步需要一些不同的参数,或者更新代码。我粘贴到这里是一个错误。@usethedeathstar我也添加了中间图像。1) 输入图像2)二值图像3)放大图像4)骨架化图像骨架化代码正确。这可能是你的形状的性质,这就是为什么有差距。您可能需要调整阈值,或者在骨架化之前更改生成二值图像的结构元素,看看这是否会对输出产生影响。