gpt4 book ai didi

python - findContours返回具有重复点的轮廓

转载 作者:行者123 更新时间:2023-12-02 17:30:08 24 4
gpt4 key购买 nike

OpenCV的findContours有时会返回不良结果

代码段尝试在边缘图像中找到最大的轮廓。

在“不良”示例中,似乎轮廓的大多数顶点都是不必要的重复。这会导致随后出现错误的contourArea和pointPolygonTest行为。

import cv2
import imutils
from scipy import misc

edges = misc.imread('edges3.png')

cnts = cv2.findContours(edges.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
sorted_cnts = sorted(cnts, key = lambda c:cv2.arcLength(c,True), reverse = True)
largest_cnt = sorted_cnts[0]

print("Largest contour area",cv2.contourArea(largest_cnt))
print("Largest contour arc length",cv2.arcLength(largest_cnt,True))
print("Largest contour num of vertx",len(largest_cnt))

enter image description here

无效的代码输出:

Largest contour area 14.0
Largest contour arc length 2639.200133085251
Largest contour num of vertx 667


enter image description here

好的代码输出:

Largest contour area 95534.0
Largest contour arc length 1321.8721450567245
Largest contour num of vertx 340


所附的两张照片几乎相同,应该返回相似的结果。但是,第一个返回的轮廓面积很小,与第二个相比,圆弧长度和顶点数增加了一倍。

最佳答案

我无法在评论中上传图片。您的边缘检测是否可能有故障并且存在一些较小的开口?结果是顶部在计算边缘旁边的区域并通过打开断开。底部正在计算整个图像吗?蓝色区域表示实际计数的区域。由于边缘检测出现中断,因此该区域实际上很小。边缘在某些点上部分失效是很常见的。

如果假设存在像素中断(您的行不连续),则此假设的结果符合您的描述

A.很小的地方,

B.将弧长和顶点数加倍

C.某些点重复,因为它们在同一行上。

enter image description here

为了解决这个问题,可以使用形态学的膨胀或凸包来缩小间隙。

关于python - findContours返回具有重复点的轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56444428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com