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

Flawed contour detection in an image python opencv

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

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

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

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

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

# 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] 

我是否可以对原始图像进行任何改动,以更全面、更准确地检测大的黑色斑点?感谢所有帮助。

问题出在您的工作流程中。

从您的处理中删除 Canny 运算符。它会给你一个来自你的斑点的边缘图像。使用 contourFinder 处理 Canny 图像后,它会将边缘段视为对象。您最大的轮廓将是最长的边缘段。 如果放大 Canny 图像,您会发现当前结果结束处存在间隙。

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

请对这些方法有所了解和理解,以免运行再次掉入此类陷阱。