图像中的有缺陷的轮廓检测python opencv

时间:2016-06-17 07:46:25

标签: python opencv matplotlib computer-vision edge-detection

我想在下图中检测出巨大​​黑色斑点的轮廓:

enter image description here

所以我使用Canny边缘检测来使用以下代码查找边缘:

edged = cv2.Canny(image, 30, 200)

enter image description here

然后,当我试图找到轮廓时,它只给我一半的斑点。

enter image description here

这是我用来找到轮廓的代码:

# find contours in the edged image, keep only the largest
# ones, and initialize our screen contour
(cnts, _) = cv2.findContours(image.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:10]

# Scan the contours for largest item
array_sizes = []

for numpoints in cnts:
    array_sizes.append(len(numpoints))

largest = max(array_sizes)
second = second_largest(array_sizes)
index_of_object = array_sizes.index(largest)

# Largest detected contour
screenCnt = cnts[index_of_object] 

我可以在原始图像中进行任何更改,以便更全面,更准确地检测到大黑斑吗?感谢所有帮助。

1 个答案:

答案 0 :(得分:-1)

问题在于您的工作流程。

从处理中删除Canny运算符。它将为您提供斑点的边缘图像。使用contourFinder处理Canny图像后,它会将边缘段视为对象。您的最大轮廓将是最长的边缘段。 如果您放大Canny图像,您会看到当前结果存在间隙。

获取blob的轮廓跳过Canny。如果findContours将白色视为前景,则可能需要反转图像。

请对这些方法有一些了解和理解,这样你就不会再遇到这些陷阱了。