Was ich versuche die Anwesenheitsliste zu tun ist, Prozess unter mir zu sagen, wer da ist und wer nicht OpenCV finden in Kreis und Positionswert Python farbige
Ich bin derzeit matchTemplate mit einem singulären schwarzen Punkt mit die alle aufgefüllten Punkte findet (Bild wird zuerst in Graustufen umgewandelt). Bild unten
Dann erhalte ich die matchPattern Array manipulieren und etwa in der Mitte eines jeden in der y-Richtung zu bekommen, und ich kann sehen, wo es Lücken zu fehlen Studenten entsprechen.
Das Problem, das ich habe, ist sicher, dass dieser Sorta funktioniert für perfekte Eingabe, aber mein Ziel ist es, in der Lage zu sein, ein Bild von dem physischen Stück Papier zu machen und dies zu verarbeiten? Hinweis: Das Anwesenheitsblatt wird von mir erstellt, damit es geändert/geändert werden kann, wie auch immer es notwendig ist.
Ich habe ein Beispielbild beigefügt, um unten zu entsprechen. Die Verwendung meiner aktuellen Methode ist nur eine Katastrophe (siehe unten). Jetzt bin ich mir nicht sicher, wohin ich von hier aus gehen soll. Ich habe versucht, den Schwellenwert zu ändern, aber nach .65 konnte ich keine Bilder finden.
import cv2
import numpy as np
from matplotlib import pyplot as plt
values = []
img_rgb = cv2.imread('/home/user/Downloads/input.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('/home/user/Downloads/input_2.png',0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.6
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
values.append(pt[1]+h/2)
cv2.imwrite('output.png',img_rgb)
values.sort()
pivot = values[0]
count = 1
total = values[0]
cleaned = []
for x in range(1,len(values)):
if(values[x] < pivot+20):
pivot = values[x]
count = count + 1
total = total + values[x]
else:
print values[x]
cleaned.append(int(total/count))
pivot = values[x]
count = 1
total = values[x]
if x == len(values)-1:
cleaned.append(int(total/count))
print values
print cleaned
Hier ist ein weiteres Testbild: