我试图找到边缘缺陷。我使用预先制作的函数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方法更智能的解决方案,请随时告诉我! :)
这是原始图片