Ich benutze die OpenCV-Bibliothek für Python, um die Kreise in einem Bild zu erkennen. Als Testfall bin ich mit dem folgenden Bild:Überlappende Kreise in OpenCV erkennen
Boden des Bechers:
ich den folgenden Code geschrieben haben, die das Bild vor der Erfassung angezeigt werden sollen, dann das Bild anzeigen mit den erfassten Kreisen hinzugefügt:
import cv2
import numpy as np
image = cv2.imread('can.png')
image_rgb = image.copy()
image_copy = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
grayscaled_image = cv2.cvtColor(image_copy, cv2.COLOR_GRAY2BGR)
cv2.imshow("confirm", grayscaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
circles = cv2.HoughCircles(image_copy, cv2.HOUGH_GRADIENT, 1.3, 20, param1=60, param2=33, minRadius=10,maxRadius=28)
if circles is not None:
print("FOUND CIRCLES")
circles = np.round(circles[0, :]).astype("int")
print(circles)
for (x, y, r) in circles:
cv2.circle(image, (x, y), r, (255, 0, 0), 4)
cv2.rectangle(image, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1)
cv2.imshow("Test", image + image_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
bekomme ich diese: resultierende Bild
Ich glaube, dass mein Problem in der Verwendung der HoughCircles()
Funktion liegt Es ist Nutzung ist:
cv2.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]])
wo minDist
ein Wert größer als 0 ist, die Kreise erfasst erfordert voneinander in einem bestimmten Abstand zu sein. Mit dieser Anforderung wäre es für mich unmöglich, alle Kreise auf dem Boden der Dose richtig zu erkennen, da sich die Mitte jedes Kreises an der gleichen Stelle befindet. Wären Konturen eine Lösung? Wie kann ich Konturen in Kreise umwandeln, damit ich die Koordinaten ihrer Mittelpunkte verwenden kann? Was muss ich tun, um die Kreisobjekte für jeden Ring am Boden der Dose am besten zu erkennen?
nicht Teil des Problems, sondern auch für die Zukunft: 'image_copy = cv2.cvtColor (Bild, cv2.COLOR_RGB2GRAY) 'sollte' image_copy = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) 'stattdessen ich denke). – Micka