如何使凸包工作更小的间隔?

时间:2017-07-14 11:27:42

标签: python opencv convex-hull convexity-defects

我试图找到边缘缺陷。我使用预先制作的函数convexHull,但它跳过了我正在寻找的缺陷。像这样:

enter image description here

我希望convexHull函数以较小的间隔运行,这样它就不会跳过轮廓上可能存在的缺陷。像这样:

enter image description here

简化,这就是我的代码:

import cv2

image = cv2.imread("path to where you store the picture")
image2 = image.copy()

imgray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
ret, thresh = cv2.threshold(imgray, 70, 255, 0) 
im2, contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)


# This is where the problem begins - after the outermost contour of the picture is found:

cnt = contours[0]
hull = cv2.convexHull(cnt, returnPoints=False)
defects = cv2.convexityDefects(cnt, hull)
for x in range(defects.shape[0]):
    s, e, f, d = defects[x, 0]
    if 900 <= d:
        far = tuple(cnt[f][0])
        cv2.circle(image2, far, 40, [0, 0, 255], 5)
        start = tuple(cnt[s][0])
        end = tuple(cnt[e][0])
        cv2.line(image2, start, end, [0, 255, 0], 2)
    else:
        continue

我的主要问题是,如果我检查的部件的几何形状是凸的(如上图所示),我的代码会标记错误的错误,并且会跳过可能存在边缘缺陷的轮廓。

我的最终目标是检测每个可能的边缘缺陷。 如果您知道比convexHull方法更智能的解决方案,请随时告诉我! :)

这是原始图片

enter image description here

0 个答案:

没有答案