Ein Blob ist ein Bereich in einem Bild, der ähnliche Eigenschaften aufweist. In der Abbildung unten kann beispielsweise eine Figur wie ein Kreis als Blob bezeichnet werden.
OpenCV verfügt über eine integrierte Funktion, die Blobs automatisch erkennt und das Auffinden erleichtert.
Ich möchte eine runde Form finden und zählen.
blob.py
import cv2
import numpy as np
#Bilder laden
image = cv2.imread('shapes.jpg', 0)
#Parameterinitialisierung
params = cv2.SimpleBlobDetector_Params()
#Blob-Bereich (minArea<= blob < maxArea)
params.filterByArea = True
params.minArea = 100
#Rundheit (4 ∗ π ∗ Fläche)/Umfang ∗ definiert durch Umfang)
#(minCircularity <= blob < maxCircularity)
params.filterByCircularity = True
params.minCircularity = 0.85
#Konvexe Oberflächeninformationen (minConvexity)<= blob < maxConvexity)
params.filterByConvexity = True
params.minConvexity = 0.1
#Stellt ein Oval dar (minInertiaRatio)<= blob < maxInertiaRatio)
params.filterByInertia = True
params.minInertiaRatio = 0.1
#Detektorerstellung
detector = cv2.SimpleBlobDetector_create(params)
#Blob-Erkennung
keypoints = detector.detect(image)
#Kreise den Klecks in Rot ein
blank = np.zeros((1, 1))
blobs = cv2.drawKeypoints(image, keypoints, blank, (0, 0, 255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
#Anzahl der Blobs
count = len(keypoints)
print(f'Anzahl der Kreise: {count}')
#Bild anzeigen
cv2.imshow("out.jpg ", blobs)
cv2.waitKey(0)
cv2.destroyAllWindows()
>python blob.py
Anzahl der Kreise: 8
Als ich den auf einer anderen Site veröffentlichten Code ausprobierte, stürzte Python ab.
Als ich es nachgeschlagen habe, scheint es, dass die Version von OpenCV einen Effekt hatte. In früheren Versionen von OpenCV wurde anstelle von SimpleBlobDetector_create () eine Funktion namens SimpleBlobDetector () verwendet, und ich denke, dass der Fluss der Codeausführung durch Kopieren und Einfügen → auf die Funktion verweist, die derzeit nicht verwendet wird → Absturz aufgetreten ist. Ich werde. Um dieses Problem zu umgehen, können Sie den Fehler vermeiden, indem Sie SimpleBlobDetector_create () verwenden oder ihn im folgenden Code neu schreiben.
ver = (cv2.__version__).split('.')
if int(ver[0]) < 3:
detector = cv2.SimpleBlobDetector(params)
else:
detector = cv2.SimpleBlobDetector_create(params)
Anwendungsbeispiele für die Blob-Erkennung umfassen das Zählen der Anzahl und das Erkennen der Position. Es ist einfach mit OpenCV zu verwenden, daher würde ich gerne etwas anderes als dieses Beispiel ausprobieren.
Danke, dass du bis zum Ende zugesehen hast. Wenn Sie Kommentare oder Vorschläge haben, zögern Sie bitte nicht, uns zu kontaktieren.
https://www.programcreek.com/python/example/89350/cv2.SimpleBlobDetector https://www.visco-tech.com/technical/direction-presence/blob/