Farbstreifenerkennung auf Reifenprofil mit OpenCV

  • C++

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von seh.

    Oder vlt. liegt es daran, dass die Übertragung von Daten zur Grafikkarte langsam ist und das verdoppeln der Datenmengen einiges an Zeit ausmacht und man dabei oftmals gerne auf Genauigkeit verzichten kann, hier sowieso, da es nicht darum geht geringe Abweichungen festzustellen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    RodFromGermany schrieb:

    Bist Du an OpenCV festgenagelt?

    Ja, absolut.

    Ich wurde extra dafür eingestellt das Projekt mit der Bibliothek umzusetzen. Eine ältere Version solch einer Software basierte auf eigene programmierte Algorithmen und das Projekt war mehr als unsauber geschrieben und nur sehr schlecht erweiterbar. Ich arbeite in einem Projekt, in dem schon Beispiele im Umgang mit OpenCV enthalten waren (durch ein anderes Feature welches schon von jemand anderem implementiert worden war), dadurch konnte ich mich in die Grundlagen recht schnell einarbeiten, war aber auch schon von Anfang an eine Projektstruktur gebunden, die ich auch fortführen soll, damit der Code für alle Mitarbeiter dort möglichst gut lesbar ist. Ich denke die alten selbst implementierten Algorithmen waren einfach so unsauber und verranzt, das es Monate gedauert hätte, bis ein Mitarbeiter kapiert hätte was da eigentlich abläuft. Und da die Algorithmen in OpenCV alle gut dokumentiert sind und OpenCV auch eigentlich alles implementiert hat was Ich für das Projekt brauche, kommt das natürlich direkt gelegen. Daher würde ich ungern noch mal komplizierte Dinge drum herum basteln. Würde ich später ein Performance Problem bekommen, sähe das wahrscheinlich schon wieder ganz anders aus und man würde um eigene implementierte Algorithmen nicht herum kommen, sagte er.

    @jvbsl
    Dazu kann ich leider nichts sagen, ich hab' mich einfach noch nicht genug informiert wieso das so ist, das sollte ich schleunigst nachholen.
    @seh Du musst in jedem Falle mit einem kontinuierlichen H-Bereich arbeiten.
    Teste einfach mal, was OpenCV sagt, wenn Du Werte von -10 bis 190 vorgibst.
    Ich erwarte eigenlich, dass das funktioniert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich erwarte ehrlichgesagt überhaupt nicht, dass das geht, das sind hier Algorithmen, die auf Speed ausgelegt sind, wenn es geht, dann bin ich eher enttäuscht, denn -10=246 mit mod evtl. noch 66, aber das ist nirgends beim Wert, den man haben möchte. Und wenn man den tatsächlich nicht nur clampen würde, dann würde das unnötig Geschwindigkeit für Überprüfungen kosten, die in 99,999% der Fälle nicht nötig ist.

    @seh: Wenns wirklich mit OpenCV allein nicht, geht, dann liegt es aber am Algorithmus selbst und nicht an der Implementierung und selbst dann wirste mit Cpp allein vmtl. nicht weit kommen, sondern dann meinen bereits vorgeschlagenen Möglichkeiten. Außerdem sind zusätzliche passes idR immer teurer als alles am stück-> weniger Sprünge/Durchläufe und evtl. sogar(kp wie OpenCV das regelt) weniger kopieren zwischen CPU<->GPU, denn das macht tatsächlich oftmals den größten Teil der Zeit aus

    Edit: Ich bin mir ziemlich sicher, dass meine Vermutung passt, also brauchst auch nichts dazu zu sagen. Kenn mich zwar nicht wirklich mit OpenCV aus, aber halbwegs mit GPU und Shadern(klassisch sowie Compute)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich habe jetzt einfach alles so gelassen wie es war und für Farben die um die Werte 0 oder 180 liegen, mehrere Farb Ranges definiert.
    Das funktioniert super und ist auch schnell genug.

    Das ganze läuft jetzt fast alles wieder unter C++, mir fehlt noch eine kleine Funktion und dann kann das Testen mit tausend verschiedenen Reifenbildern beginnen :thumbsup:

    seh schrieb:

    Testen mit tausend verschiedenen Reifenbildern
    Das ist sehr gut. :thumbup:
    Bau Dir da ruhig einen kleinen Automaten, und speichere Dir zu den Bildern die Ergegnisse.
    Und mach es gleich so, dass Du die alten mit neuen Ergebnissen zum gleichen Bild auch vergleichen kannst.
    Wenn Du nämlich beim 982. Bild bist, wirst Du erkennen, dass am Algorithmus noch etwas gefeilt werden muss.
    Und da fangen die Tests wieder von vorn an, und die Ergebnisst müssen dieselben sein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Bau Dir da ruhig einen kleinen Automaten, und speichere Dir zu den Bildern die Ergegnisse.



    Genau, diese Visualisierungssoftware bietet auch schon die Möglichkeit Zwischenergebnisse geordnet abzulegen wenn ich diese an die Software von der Bibliothek aus übergebe zum testen. Sandbox oder so heißt das.

    Das wird locker flockig funktionieren. Ja und dann kommt die Feinarbeit wenn noch was verbessert werden muss. :thumbup:
    Trotzdem an dieser Stelle noch mal vielen lieben Dank für eure Zeit und Unterstützung mir da weiterzuhelfen.

    Grüße
    seh