1

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

在此处输入图像描述

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

在此处输入图像描述

简化,这就是我的代码的样子:

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 方法更智能的解决方案,请随时告诉我!:)

这是原图

在此处输入图像描述

4

0 回答 0