Bilderkennung mit positionsrückgabe (X,y)

  • VB.NET
  • .NET 4.5

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von nafets.

    @RodFromGermany ich hab sowas ähnliches eingebaut: Bilderkennung mit positionsrückgabe (X,y) (Source[34])(post: Bilderkennung mit positionsrückgabe (X,y))

    Ich hab einem Pixel max. 4 Punkte versprochen für jeden Channel.
    Fand es unnötig da noch mit % zu rechnen.
    @Facebamm Das setzt natürlich voraus, dass die Bilder pixelidentisch sind.
    Ich weiß nicht, was passiert, wenn Transparenz eine Rolle spielt.
    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 da hast du recht, aber dafür könnte man sich verschiedene PixelTypen anlegen und ein Compare reinpacken

    Also
    MemoryImage<T> : where T : IPixel { -- }
    IPixel {
    int Compare(IPixel);
    }

    Pixel24Bpp : IPixel
    Pixel32Bpp : IPixel

    und
    public static Point FindImage<TSrc, TDest>(MemoryImage<TSrc> src, MemoryImage<TDest> dest) { }
    @Facebamm Wenn Du mit Screenshots arbeitest, siehst Du die überlagerte Pixelfarbe, und da geht diese Philosophie vor die Hose!
    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!
    @Facebamm Transparente Pixel lassen den Hintergrund von einem anderen Fenster durchscheinen. Da entsteht eine resultierende Farbe bei, die abhängig ist von dem Hintergrundfenster.
    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!
    Gibts einen Grund, warum ihr alle versucht, irgendwas selbst zu basteln, anstatt einfach was fertiges zu nehmen, was direkt funktioniert? Das Problem, an dem ihr hier arbeitet, nennt sich "Template Matching" und ist in jeder guten Computer Vision-Library fertig implementiert. In OpenCV nennt sich die Methode ​matchTemplate, in AForge.NET ​ExhaustiveTemplateMatching.

    Ich persönlich würde OpenCV empfehlen und es über OpenCVSharp einbinden (einfach über NuGet installieren). OpenCV gibt dann standardmäßig einfach nen 2D-Array zurück, wo es für jeden Punkt nen Score gibt, wie gut das Template dort hin passt. Da nimmt man dann einfach den Pixel mit dem höchsten Score und hat die Location. [Über diesen Score kannst du dann auch deine akzeptierten Toleranzen definieren - wenn du checkst, ob der Score mindestens x ist, definierst du darüber deine mindeste relative Ähnlichkeit.]

    Abgesehen davon, dass man am Ende nur noch ein paar wenige Zeilen Code hat, ist das alles am Ende auch einfach unverschämt schnell, weil bei OpenCV sehr viele schlaue Leute über viele Jahre hinweg alles bis aufs letzte optimiert haben.
    @Facebamm
    Jo, das ist zwar nett, und ich hab selbst auch Spaß am Programmieren (bin zwar aus der Softwareentwicklung zum Selbstzweck mittlerweile größtenteils raus, aber das ist ein anderes Thema), aber wäre es nicht sinnvoll, den TE erstmal auf eine für ihn nutzbare Lösung hinzuweisen, bevor man über 4 Tage hinweg Sachen bastelt, die der TE weder nutzen kann noch überhaupt stabil funktionieren (wenn ich der Nachricht von Rod dazu vertrauen kann). Danach kann von mir aus liebend gern noch versuchen, ne eigene Lösung zu machen und diese noch zu optimieren etc, aber so hilft es dem TE halt leider nur sehr begrenzt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nafets“ ()