我想在下图中检测出巨大黑色斑点的轮廓:
所以我使用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]
我可以在原始图像中进行任何更改,以便更全面,更准确地检测到大黑斑吗?感谢所有帮助。
答案 0 :(得分:-1)
问题在于您的工作流程。
从处理中删除Canny运算符。它将为您提供斑点的边缘图像。使用contourFinder处理Canny图像后,它会将边缘段视为对象。您的最大轮廓将是最长的边缘段。 如果您放大Canny图像,您会看到当前结果存在间隙。
获取blob的轮廓跳过Canny。如果findContours将白色视为前景,则可能需要反转图像。
请对这些方法有一些了解和理解,这样你就不会再遇到这些陷阱了。