我正在尝试使用 Python 的 OpenCV 查找 O 形环上的椭圆异常。
让我们将异常定义为不在 O 形环侧面方向的划痕、起伏、突然的颜色变化。
请注意,所有照片都是从 orings 上方拍摄的。
我想将 OpenCV 标记为红色的部分检测为异常:
我想我基本上应该尝试找到一个椭圆边缘检测算法。
我尝试应用自适应蒙版和边缘检测算法。但正如预期的那样,他们正在检测所有形式的异常,而不是我上面提到的那种。
import cv2 as cv
img = cv.imread('oring.jpg')
denoised = cv.bilateralFilter(img, 7, 39, 39)
denoised = cv.GaussianBlur(denoised, (3, 3), 0)
gray = cv.cvtColor(denoised, cv.COLOR_BGR2GRAY)
canny = cv.Canny(denoised, 100, 255)
ddepth = cv.CV_16S
scale = 1
delta = 0
grad_x = cv.Sobel(gray, ddepth, 1, 0, ksize=3, scale=scale, delta=delta, borderType=cv.BORDER_DEFAULT)
grad_y = cv.Sobel(gray, ddepth, 0, 1, ksize=3, scale=scale, delta=delta, borderType=cv.BORDER_DEFAULT)
grad = cv.addWeighted(cv.convertScaleAbs(grad_x), 0.5, cv.convertScaleAbs(grad_y), 0.5, 0)
mask = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 3)
cv.imshow('denoised', denoised)
cv.imshow('canny', canny)
cv.imshow('sobel', grad)
cv.imshow('mask', mask)
cv.waitKey(0)