Python 2.7 无法找到所有轮廓-Opencv、python

Python 2.7 无法找到所有轮廓-Opencv、python,python-2.7,opencv,Python 2.7,Opencv,我正在一张图像上寻找轮廓,我成功地识别了下图中几乎所有的轮廓。但我找不到像左边两个灰色方框那样的特定轮廓。我已经尝试了所有的轮廓方法,如树、列表、外部和阈值 请建议我是否遗漏了什么或可以做些什么来改进它 img = cv2.imread(input_image, 0) kernel = np.ones((5, 5),np.uint8) morphological_img = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) canny_img

我正在一张图像上寻找轮廓,我成功地识别了下图中几乎所有的轮廓。但我找不到像左边两个灰色方框那样的特定轮廓。我已经尝试了所有的轮廓方法,如树、列表、外部和阈值

请建议我是否遗漏了什么或可以做些什么来改进它

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

您的问题没有显示或链接到它所指的图像。但以下是改善这一点的步骤:

  • 除非图像已经是二值图像,否则标准方法是首先应用阈值,然后使用形态学操作

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

  • 如果canny_img没有显示与所需轮廓相对应的边缘(请尝试cv2.imshow),则findContours将非常有用(如果有的话)


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

    处理图像时,关键部分是处理,在您的情况下,您使用的是阈值,但如果阈值不足,您将永远无法找到解决方案,我建议显示图像阈值。更好的方法是将图像分割为多个部分。在检测轮廓之前,图像的左侧部分可能需要不同类型的预处理。@eyllanesc我已经编辑了我的问题,请检查。我正在使用内核和变形梯度和canny来代替阈值。在这种情况下,我认为不需要进行形态学操作。如果你跳过这个,直接在img上执行Canny,会发生什么?你也可以用cv2.Houghline来检测这些箱子周围的直线。谢谢@Toroto会尝试这个…我想给你+1,但这告诉我我需要+15的声誉来完成这一点。谢谢,不要担心。我很高兴能帮上忙。