Я пытаюсь обнаружить черные пятна на следующем изображении.
Я использую адаптивный порог и использую контуры поиска в opencv. Этот метод успешно обнаруживает большинство черных пятен на сером фоне. Однако он не может обнаружить пятна по краям просто потому, что обнаружение контура считает, что пятна являются частью черного фона, см. здесь:
Вот код, который я использовал для получения этих контуров:
import cv2
image_path = "cropped.png"
img = cv2.imread(image_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# do adaptive threshold on gray image
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 101, 3)
# apply morphology open then close
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (1, 1))
blob = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (10, 10))
blob = cv2.morphologyEx(blob, cv2.MORPH_CLOSE, kernel)
# invert blob
blob = (255 - blob)
# Get contours
cnts, hierarchy = cv2.findContours(blob, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
result1 = img.copy()
cv2.drawContours(result1, cnts, -1, (0, 0, 255), 3)
cv2.imwrite("_Fail_Blob.png", result1)
Любые предложения о том, как обнаружить черные пятна по краям? В конце концов, ищем алгоритм, позволяющий выводить что-то вроде следующего: