Я пытаюсь определить 6 квадратов на этом изображении:
и определить, какие из них отмечены или имеют черный цвет (здесь (1,1) и (3,2)).
может быть текст или рисунок, но ничего на самом деле аналогично установленным флажкам
изображение можно слегка повернуть
Подход # 1
Я пробовал:
_, contours, hierarchy = cv2.findContours(gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for j, c in enumerate(contours):
cv2.drawContours(imgcolor, [c], 0, COLORS[j % len(COLORS)], thickness=1)
но результат довольно плохой:
Что я пробовал до сих пор:
фильтр по области с cv2.contourArea(c)
Используйте
shape = cv2.approxPolyDP(c, 0.05 * cv2.arcLength(c, True), closed=True)
и сохраняйте прямоугольники только с if len(shape) == 4:
, но это не будет работать, так как некоторыеквадраты разделены на два или три контура: см. верхний правый квадрат, который распознается как красный + голубой контур
Примечание: некоторые квадраты успешно распознаются контуром, но даже по двум контурам , поэтому, когда мы drawContour
, мы видим two контуры друг на друге для одного и того же квадрата
Подход № 2
Можно ли использовать корреляцию между исходным изображением и всеми «смещенными по положению + повернутыми + масштабированными» версиями этого «ящика 3х2»:
Позволит ли этохорошее обнаружение?
TL; DR:
Как надежно определить 6 полей на таком изображении и найти флажки, которые отмечены или имеют черный цвет?