Best Practice Schaltfläche im Bild finden

Bauär

Mitglied
Nabend, ich versuche gerade die Position und Größer einer Schlatfläche/Buttons eines Screenshots zu bestimmen, wie geht man hier am besten vor? Die Schaltflächen sehen ähnlich aus.
 

mihe7

Top Contributor
Wenn die Schaltflächen "ähnlich" aussehen, woher weißt Du dann, welche Du suchst? Und wenn Du weißt, welche Du suchst, warum kennst Du dann die Größe nicht?
 

Bauär

Mitglied
Chatgpt schlägt folgendes vor, bin aber nicht sicher, ob das schon das Problem löst:

Java:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.LinkedList;
import java.util.Queue;

public class Buttons {
    public static Rectangle findTextButton(BufferedImage image) {
        int width = image.getWidth();
        int height = image.getHeight();
        boolean[][] visited = new boolean[height][width]; // Verfolgung besuchter Pixel

        // Durchsuche das Bild
        for (int y = 1; y < height - 1; y++) {
            for (int x = 1; x < width - 1; x++) {
                if (!visited[y][x]) {
                    // Analysiere, ob Pixel ein potenzieller Startpunkt ist
                    Color current = new Color(image.getRGB(x, y));
                    Color next = new Color(image.getRGB(x + 1, y));

                    if (isHighContrast(current, next)) {
                        // Flood-Fill, um die Region zu bestimmen
                        Rectangle bounds = detectButtonBounds(image, x, y, visited);

                        if (bounds.width > 20 && bounds.height > 10) { // Mindestgröße prüfen
                            return bounds; // Schaltfläche gefunden
                        }
                    }
                }
            }
        }
        return null; // Keine Schaltfläche gefunden
    }

    // Flood-Fill zur Ermittlung der Region
    private static Rectangle detectButtonBounds(BufferedImage image, int startX, int startY, boolean[][] visited) {
        int width = image.getWidth();
        int height = image.getHeight();

        // Grenzen der Schaltfläche
        int minX = startX, minY = startY, maxX = startX, maxY = startY;

        // Warteschlange für die Flood-Fill
        Queue<Point> queue = new LinkedList<>();
        queue.add(new Point(startX, startY));
        visited[startY][startX] = true;

        while (!queue.isEmpty()) {
            Point current = queue.poll();
            int x = current.x;
            int y = current.y;

            // Aktualisiere die Grenzen
            minX = Math.min(minX, x);
            minY = Math.min(minY, y);
            maxX = Math.max(maxX, x);
            maxY = Math.max(maxY, y);

            // Nachbarn prüfen
            for (int dx = -1; dx <= 1; dx++) {
                for (int dy = -1; dy <= 1; dy++) {
                    int newX = x + dx;
                    int newY = y + dy;

                    if (newX >= 0 && newY >= 0 && newX < width && newY < height && !visited[newY][newX]) {
                        Color currentColor = new Color(image.getRGB(x, y));
                        Color neighborColor = new Color(image.getRGB(newX, newY));

                        if (isHighContrast(currentColor, neighborColor)) {
                            queue.add(new Point(newX, newY));
                            visited[newY][newX] = true;
                        }
                    }
                }
            }
        }

        // Rechteck mit den gefundenen Grenzen erstellen
        return new Rectangle(minX, minY, maxX - minX + 1, maxY - minY + 1);
    }

    private static boolean isHighContrast(Color c1, Color c2) {
        int threshold = 50; // Kontrast-Schwellenwert
        int rDiff = Math.abs(c1.getRed() - c2.getRed());
        int gDiff = Math.abs(c1.getGreen() - c2.getGreen());
        int bDiff = Math.abs(c1.getBlue() - c2.getBlue());
        return rDiff + gDiff + bDiff > threshold;
    }
}

Wenn die Schaltflächen "ähnlich" aussehen, woher weißt Du dann, welche Du suchst?
alle, im zweiten Schritt soll dann der Text erkannt werden

Und wenn Du weißt, welche Du suchst, warum kennst Du dann die Größe nicht?
negative Annahme, also true
 

mihe7

Top Contributor
alle, im zweiten Schritt soll dann der Text erkannt werden
Aha. Also zwei Schritte: 1. Buttons finden, 2. Text finden, um den richtigen Button auszuwählen.

Chatgpt schlägt folgendes vor, bin aber nicht sicher, ob das schon das Problem löst:
Rein vom Code her findet das Ding halt Rechtecke mit einer mehr oder weniger einheitlichen Rahmenfarbe. Je nach Hintergrund und Rahmen musst Du ggf. den Schwellenwert anpassen.
 

KonradN

Super-Moderator
Mitarbeiter
Aus welcher Platform willst Du denn die andere Anwendung steuern? Und ist eine direkte Steuerung der Anwendung nicht einfacher?

Also unter Windows dann halt mittels findWindow/findWindowEx/SendMessage kannst Du halt ein Fenster suchen, dann in dem Fenster den Button und dann mittels SendMessage dem Button direkt ein Click Event senden.

So eine Steuerung hat halt den Vorteil, dass es deutlich weniger störanfällig ist, als eben ein Bildschirmfoto zu verwenden um dann irgendwelche Mausklicks im System zu geben. Man kann mittels Tools wie ispy oder so sich die Struktur ansehen, um zu sehen, ob sowas für Dein Fenster möglich ist. (Wenn es alles nur ein Spiel wäre, das grafisch dargestellt wird, dann hast Du natürlich nicht die Controls. Da würde der Ansatz nicht gehen)
 

KonradN

Super-Moderator
Mitarbeiter
Konrad, ich bin mir nicht sicher ob da von die beschriebe auch bei Sportwetten funktioniert... möglicherweise nicht.
Die Frage ist ja, was genau Du steuern willst. Sportwetten sagt nichts zu der Anwendung aus. Das klingt aber jetzt etwas mehr nach Webseite und da wäre der Ansatz mit den Bildschirmfotos aus meiner Sicht auch der falsche Ansatz. Das ist ja genau das Umfeld, wo es sehr viele Möglichkeiten gibt. Angefangen von einfachen "Erweiterungen" über Tools wie Tampermonkey bis hin zur Verwendung von Testtools wie Selenium, Cypress, Puppeteer, ...

Daher ist die Frage von mir, was du (technologisch gesehen) genau automatisieren möchtest.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
N netbeans schaltfläche mit code belegen ? Java Basics - Anfänger-Themen 7
G JLabel <html> mit Bild innerhalb des Textes </html> Java Basics - Anfänger-Themen 4
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
krgewb Bild itextpdf Java Basics - Anfänger-Themen 2
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
VPChief Bild in JEditorPane Java Basics - Anfänger-Themen 9
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
S Bild einfügen // NEU Java Basics - Anfänger-Themen 12
N Bild drehen Java Basics - Anfänger-Themen 3
S Ein Bild mit dynamischer Quelle neuzeichnen Java Basics - Anfänger-Themen 12
N GLOOP Bild nicht ansichtbar Java Basics - Anfänger-Themen 5
M Bild in JFrame Java Basics - Anfänger-Themen 1
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 17
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
S Bild über JButton legen Java Basics - Anfänger-Themen 3
B Bild mit Schrift befüllen / Anpassung bei Wortlänge Java Basics - Anfänger-Themen 2
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
D ImageView mit einfarbigem Bild fuellen Java Basics - Anfänger-Themen 3
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
S Bild einfügen Java Basics - Anfänger-Themen 16
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
D Bild zu Text Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
Anfänger2011 Bild programmieren?! Java Basics - Anfänger-Themen 3
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
J Bild loopen Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
C Erste Schritte Bild holen und speichern Java Basics - Anfänger-Themen 1
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
J Ganzes Bild Java Basics - Anfänger-Themen 4
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
S Bild auf eine Position rotieren?! Java Basics - Anfänger-Themen 4
P Bild bearbeiten Java Basics - Anfänger-Themen 9
Z Datenmatrix in Bild verwandeln Java Basics - Anfänger-Themen 4
C Bild verschwinden lassen Java Basics - Anfänger-Themen 7
S Bild Icon aus ID3Tag auslesen Java Basics - Anfänger-Themen 4
E Bild vom FileChooser aus via ImageIcon in DB schreiben Java Basics - Anfänger-Themen 16
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
O Auflösung einer Bild-Datei bekommen ohne sie herunterzuladen?? Java Basics - Anfänger-Themen 7
L Bild-Datein "zuschneiden" Java Basics - Anfänger-Themen 11
O DeviantArt-Bild Konverter: Fehler.. Java Basics - Anfänger-Themen 16
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
M Bild einbinden Java Basics - Anfänger-Themen 7
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
T Bild laden Java Basics - Anfänger-Themen 7
R Bild in GUI Java Basics - Anfänger-Themen 11
D Eclipse Juno zeigt Bild nicht bei Run Java Basics - Anfänger-Themen 3
Kenan89 Bild mit jar öffnen Java Basics - Anfänger-Themen 4
S Problem bei Bewegung von einem Bild! Java Basics - Anfänger-Themen 2
J Bild mit transparenter Farbe Java Basics - Anfänger-Themen 10
N Erste Schritte Applet zeichnet Bild nicht Java Basics - Anfänger-Themen 10

Ähnliche Java Themen


Oben