Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二进制图像的细化:python_Python_Opencv_Image Processing - Fatal编程技术网

二进制图像的细化: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)骨架化图像骨架化代码正确。这可能是你的形状的性质,这就是为什么有差距。您可能需要调整阈值,或者在骨架化之前更改生成二值图像的结构元素,看看这是否会对输出产生影响。