Мой текущий подход заключается в пороговом определении изображения и поиске контуров. Я преобразую изображение в оттенки серого, применяю CLAHE для повышения контрастности, затем использую порог Оцу с THRESH_BINARY_INV и, наконец, фильтрую контуры по площади и округлости следующим образом:
Код: Выделить всё
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
gray = clahe.apply(gray)
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
bubbles = []
for cnt in contours:
area = cv2.contourArea(cnt)
if not (60