Ich versuche, um die Anzahl der richtigen Antworten erhalten ein Muster der Antwort des Modells und ein Beispiel für ein Antwortblatt, so dass ich cv2.bitwise_and
Funktion dann mache ich Erosion und Dilatation für das resultierende Bild, um die Objekte zu zählen, die die richtigen Antworten darstellen, aber es funktioniert nicht gut. Hier zwei Beispiele Bilder, die ich verwende:bitwise_and zwei Bilder und Zählen der resultierenden Objekte
Das ist das Ergebnis:
so erkennt es drei Kreise statt 2. I versucht, die Anzahl der Iterationen in Erosion und Dilatation zu ändern und die Form der StructuringElement
ändern, aber immer noch die falschen Antworten bekommen. Hier ist mein Code:
import numpy as np
import cv2
from PIL import Image
img1 = cv2.imread("model_c3.png")
img2 = cv2.imread("ex_c3.png")
retval1, img1 = cv2.threshold(img1,225,255,cv2.THRESH_BINARY_INV)
retval2, img2 = cv2.threshold(img2,225,255,cv2.THRESH_BINARY_INV)
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
img1gray = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
mask = cv2.bitwise_and(img1gray, img2gray,img2)
el = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
e = cv2.erode(mask, el, iterations=2)
d = cv2.dilate(e, el, iterations=7)
im, contours, hierarchy = cv2.findContours(
d,
cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE
)
centers = []
radii = []
for contour in contours:
br = cv2.boundingRect(contour)
m = cv2.moments(contour)
center = (int(m['m10']/m['m00']), int(m['m01']/m['m00']))
centers.append(center)
print("There are {} circles".format(len(centers)))
cv2.imshow('result.png',d)
cv2.waitKey(0)
cv2.destroyAllWindows()
habe ich versucht, dies aber nicht für alle echt positive Blobs in anderen Bildern sind größer als die falsch-positiven ones.It erhöhte den Fehler in einigen Bildern –