Bild und Desktop auf Übereinstimmung prüfen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Bild und Desktop auf Übereinstimmung prüfen

    Hallo,
    ich versuche mal mein Problem zu erklären, vielleicht kann mir jemand weiterhelfen:

    Ich habe eine Bilddatei und möchte auf meinen Desktop nach Übereinstimmungen suchen.

    Sprich ich hab ein Beilspielfoto (siehe Anhang) und möchte Wissen ob dieses Bild sich irgendwo auf dem Desktop aktuell befindet.

    Lässt sich das irgendwie realisieren?

    Google hat leider bis jetzt nichts verwertbares ausgespuckt und folgenden Foreneintrag hatte ich bereits gefunden konnte mir aber nicht weiterhelfen
    Bilder erkennen und vergleichen
    Bilder
    • bunny-155674.png

      351,7 kB, 1.398×1.920, 16 mal angesehen
    Hallo

    Es kommt darauf an. Wenn es wirklich das SELBE Bild ist, ist das möglich.
    Du kannst Pixel für Pixel durchgehen und mit dem zweitem Bild vergleichen. Sind diese gleich (auch in der Anordnung) ist es das selbe Bild.

    Ein Prozedueller vergleich ist eher sehr schwer möglich.

    PS: Kann aber bei größeren Bildern auch langsam werden.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Vollzitat entfernt

    Achso okay. ne das Bild ist maximal ca. 150x47, eher kleiner vermutlich. Allerdings sollte das erkennen quasi fast Instant geschehen auch wenn es z.B. nur 0.2sec Sichtbar ist sollte es gefunden werden.

    Für den Vergleich 2er Bilddateien hab ich bereits eine Lösung gefunden die Funktioniert

    VB.NET-Quellcode

    1. Dim bm1 As Bitmap = Image.FromFile("C:\testimg1.jpg")
    2. Dim bm2 As Bitmap = Image.FromFile("C:\testimg2.jpg")
    3. ' Make a difference image.
    4. Dim wid As Integer = Math.Min(bm1.Width, bm2.Width)
    5. Dim hgt As Integer = Math.Min(bm1.Height, bm2.Height)
    6. Dim bm3 As New Bitmap(wid, hgt)
    7. ' Create the difference image.
    8. Dim are_identical As Boolean = True
    9. Dim r1, g1, b1, r2, g2, b2, r3, g3, b3 As Integer
    10. Dim eq_color As Color = Color.White
    11. Dim ne_color As Color = Color.Red
    12. For x As Integer = 0 To wid - 1
    13. For y As Integer = 0 To hgt - 1
    14. If bm1.GetPixel(x, y).Equals(bm2.GetPixel(x, _
    15. y)) Then
    16. bm3.SetPixel(x, y, eq_color)
    17. Else
    18. bm3.SetPixel(x, y, ne_color)
    19. are_identical = False
    20. End If
    21. Next y
    22. Next x
    23. ' Display the result.
    24. PictureBox1.Image = bm3
    25. Me.Cursor = Cursors.Default
    26. If (bm1.Width <> bm2.Width) OrElse (bm1.Height <> _
    27. bm2.Height) Then are_identical = False
    28. If are_identical Then
    29. MessageBox.Show("The images are identical")
    30. Else
    31. MessageBox.Show("The images are different")
    32. End If
    33. bm1.Dispose()
    34. bm2.Dispose()


    Allerdings weiß ich nicht wie ich das auf den Desktop anwenden kann. Weil er Prüft bei einem Screenshot ja den Kompletten Desktop, und da ist klar das er sagt das die Bilder unterschiedlich sind.^^

    ~blaze~: Vollzitat entfernt

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

    Hallo

    Du kannst erkennen ob ein Bild hinzugekommen ist mit dem 'FileSystemWatcher'.
    Google mal!

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Das habe ich schon gefunden, aber ich glaube ich habe das Problem zu Unpräzise beschrieben oder checke das nicht ganz^^

    Ich möchte Bild1 in via VB.NET laden (als Vorgabe, z.b. der A) und sobald das gleiche Bild irgendwo auf dem Bildschirm auftaucht (egal ob beim Surfen im Internet, in einem Word Dokument oder so) sollte ein Alert erfolgen.
    Also es geht nicht um den Vergleich von 2 Bilddateien direkt.

    Beispiel Anhand des Anhanges von Post #1:
    Nehmen wir an der Hase hat eine Auflösung von 200x150

    Der Hase ist das "gesuchte" Objekt das via VB.NET geladen wird.
    Sobald dieser Hase irgendwo auf dem Desktop erscheint soll ein Alert ausgegeben werden. Egal ob sich das Bild nun im Internet Browser, in einem Word Dokument oder z.B. in Photoshop befindet. (also kein direkter Bilddateien vergleich)

    Nur ich wüsste nicht wie ich das Realisieren kann das er den Hasen der über eine komplette Desktop Sucht und dann sagt ob da irgendwo dieser Hase "gesichtet" wurde.
    Mit dem oben geposteten Code erfahre ich nur ob die Bilder identisch sind oder nicht, aber nicht ob sich der Hase irgendwo auf dem Screenshot befindet.

    Desktop Auflösung ist 1920x1080

    LG Thomas

    PS: Ich hoffe das ganze war nicht noch Verwirrender^^
    Ok, du hattest Desktop geschrieben. Der Bildschirm is hald kein Desktop.

    Das Vorhaben ist meines wissens nach mit .Net sicher nicht in Echtzeit möglich.
    Da kann ich dir leider nicht Helfen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Auge und Gehirn sind sehr gut darin, zwischen zwei Bilder Ähnlichkeit zu erkennen und das innerhalb eines Augenblicks (und zwar im wahrsten Sinne des Wortes). Entwicklungszeit: Mehrere hundert Millionen Jahre. Ok, das ist vielleicht eine Vergleich zwischen Äpfel und Autos. Aber trotzdem: Wo wir Ähnlichkeiten oder gar Gleichheit sehen, ist ein Computer eher erbsenzählerisch und meint: »neenee, das gefundene Bild ist 0,01% größer als das Original. Und der Pixel an 100, 100 hat im Original den ARGB-Wert 128, 128, 128 ,128, das Original aber 127,129, 130, 130. Das ist nie und nimmer identisch.« Von der Möglichkeit erstmal das Zielbild auf dem Bildschirm zu finden, ganz zu schweigen. Da müsstest Du schon selber was basteln, um das zu bewerkstelligen. Bilderkennung ist m.E. eines der schwierigeren Themen. Nicht unmöglich. Aber wie @Nofear23m schon meinte: In Echtzeit ein schwieriges Unterfangen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.