2017-09-05 213 views
0

我正在寻找轮廓的图像,我成功地能够识别下面图像中几乎所有的轮廓。但是我无法找到像左侧两个灰色框那样的特定轮廓。我已经尝试了所有轮廓方法,如树,列表,外部,并尝试与阈值。无法找到所有轮廓 - Opencv,python

请建议如果我失去了一些东西,也可以做些什么来改善它

img = cv2.imread(input_image, 0) 

kernel = np.ones((5, 5),np.uint8) 
morphological_img = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) 

canny_img = cv2.Canny(morphological_img, 200, 300) 
input_imag, contours, hierarchy = 
cv2.findContours(canny_img,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) # get contours 

https://i.stack.imgur.com/WomfA.png

+0

处理图像的关键部分是处理,在你的情况下,你正在做的阈值,但如果阈值不足,你将永远无法找到解决方案,我建议显示图像阈值。 – eyllanesc

+0

更好的方法是将图像分割成几部分。在检测轮廓之前,图像的左侧部分可能需要不同类型的预处理。 – zindarod

+0

@eyllanesc我编辑了我的问题,请检查。我正在使用内核和Morph渐变和canny而不是阈值来达到此目的 –

回答

0

你的问题不显示或链接到的图像,它指的是。但这里有改善这一步骤:

  1. 除非你的形象已经是二进制的,标准的方法是首先应用阈值,然后利用形态学操作。

  2. 如果您只对轮廓感兴趣,可以先执行Canny边缘检测,然后使用形态学操作来增强要检测的轮廓。

  3. 如果canny_img未显示与所需轮廓相对应的边缘(尝试cv2.imshow),则findContours需要使用很多,如果有的话。

如果您可以编辑答案以包含图片,我们将能够提供更具体的答案。

+0

我编辑了我的问题。请检查.... –

+0

在这种情况下,我没有看到任何需要做形态操作。如果你跳过它并直接在img上执行Canny,会发生什么?您也可以使用cv2.HoughLines来检测这些框周围的直线。 – Totoro

+0

谢谢@Toroto会试试这个....我想给你+1,但这是告诉我,我需要+15名声来做到这一点。 –