Kreiserkennung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Noises1g
User
Beiträge: 6
Registriert: Dienstag 29. Oktober 2019, 16:29

Ist es möglich von diesem Bild mit schlechter Auflösung https://www.bilder-upload.eu/upload/029 ... 386345.png eine Kreiserkennung hinzubekommen? Es werden nur die Koordinate der Mittelpunkte benötigt.
Noises1g
User
Beiträge: 6
Registriert: Dienstag 29. Oktober 2019, 16:29

Hier nochmal das Bild https://www.bilder-upload.eu/bild-9c4a0 ... 6.png.html da es oben nicht mehr funktioniert.
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Noises1g
User
Beiträge: 6
Registriert: Dienstag 29. Oktober 2019, 16:29

Nicht wirklich da ich es auch schon mit hough circles versucht habe, aber keinen Erfolg hatte.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

WAS hast du versucht? Irgendwas mit hough-circles ist ein bisschen schwach.

Du musst ggf. vorverarbeiten - zB binaer thresholden, oder Konvertierung in den HSV-Farbraum, und dann alles was gruen ist maskieren. Wenn du dann ein Bild hast, dass die Kreise in weiss auf schwarz zeigt, kannst du zB morphologischen Operationen dafuer sorgen, dass die besser voneinander separiert werden. Und dann mit hough-circles arbeiten.
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Code: Alles auswählen

import cv2 as cv
img_input = cv.imread('green-circle.png')
edges = cv.Canny(img_input, 22, 131)
circles = cv.HoughCircles(edges, cv.HOUGH_GRADIENT, dp=1, minDist=8,
                          param1=50, param2=10, minRadius=6, maxRadius=10)
img_result = cv.copyTo(img_input, img_input)
if circles is not None:
    for circle in circles[0, :]:
        center = (circle[0], circle[1])
        radius = circle[2]
        cv.circle(img_result, center, radius, (255, 0, 255), 1)
    print(f'gefundene grüne Punkte:\t{len(circles[0, :])}')

cv.imshow("Input", img_input)
cv.imshow("Edges", edges)
cv.imshow("Result", img_result)
cv.waitKey()
Ein erster Versuch ohne großes Anpassen der Parameter. Zum Testen von sinnvollen Parametern empfehle ich den OpenCV Demonstrator. Da kann man einfach mal mit den Werten spielen und schauen was passiert. Ggf. musst du vorbereitete Bilder zwischenspeichern und dort einlesen.
Als Vorbereitung sind die von __deets__ genannten Möglichkeiten zu berücksichtigen.
Es wäre echt interessant zu wissen, was du bisher versucht hast. Eventuell muss das ja nur ein wenig angepasst werden.
Noises1g
User
Beiträge: 6
Registriert: Dienstag 29. Oktober 2019, 16:29

einfachTobi hat geschrieben: Dienstag 11. Februar 2020, 16:36

Code: Alles auswählen

import cv2 as cv
img_input = cv.imread('green-circle.png')
edges = cv.Canny(img_input, 22, 131)
circles = cv.HoughCircles(edges, cv.HOUGH_GRADIENT, dp=1, minDist=8,
                          param1=50, param2=10, minRadius=6, maxRadius=10)
img_result = cv.copyTo(img_input, img_input)
if circles is not None:
    for circle in circles[0, :]:
        center = (circle[0], circle[1])
        radius = circle[2]
        cv.circle(img_result, center, radius, (255, 0, 255), 1)
    print(f'gefundene grüne Punkte:\t{len(circles[0, :])}')

cv.imshow("Input", img_input)
cv.imshow("Edges", edges)
cv.imshow("Result", img_result)
cv.waitKey()
Danke, dass hat sehr geholfen. :)
Antworten