OpenCV не обнаруживает незаполненные контуры кругов как пузырьки на листе OMR. Какой метод обнаружения работает как для Python

Программы на Python
Anonymous
OpenCV не обнаруживает незаполненные контуры кругов как пузырьки на листе OMR. Какой метод обнаружения работает как для

Сообщение Anonymous »

Я создаю систему OMR (оптического распознавания меток) на Python с использованием OpenCV. В моем листе ответов 180 кружков, расположенных в 4 столбцах по 45 вопросов, с 4 вариантами ответов (A, B, C, D) на каждый вопрос. Каждый пузырь представляет собой пустой круг с цветным контуром и белой заливкой, а когда учащийся отмечает ответ, он становится темным заполненным кружком. Мне нужно сначала определить все положения пузырьков, независимо от того, заполнены они или нет, а затем измерить, какие из них действительно заполнены.
Мой текущий подход заключается в пороговом определении изображения и поиске контуров. Я преобразую изображение в оттенки серого, применяю 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

Вернуться в «Python»