Java найти изображение на экране - PullRequest
9 голосов
/ 29 апреля 2011

Можете ли вы, ребята, дать мне советы о том, как найти изображение на экране. Я имею в виду простую комбинацию пикселей. Например, он находит координаты белого квадрата 30x30 пикселей.

Класс Java-робота позволяет мне найти цвет определенного пикселя. Но мне нужно наоборот, я хочу, чтобы моя программа просканировала мой экран и затем сообщила мне координаты этого маленького изображения. Ну, я мог бы пройти все пиксели с роботом, но это должно быть быстрее, чем это. Гораздо быстрее.

Есть предложения?

Ответы [ 2 ]

6 голосов
/ 19 марта 2013

На самом деле, есть гораздо более простое или более надежное решение для этого.Вы можете реализовать библиотеки Sikuli внутри вашего Java-приложения, чтобы находить элементы изображения на экране и взаимодействовать с ними.Он предназначен для автоматизации тестирования пользовательского интерфейса, но я думаю, что он может удовлетворить ваши потребности довольно просто.

Пример приложения ( источник ):

import java.net.MalformedURLException;
import java.net.URL;

import org.sikuli.api.*;
import org.sikuli.api.robot.Mouse;
import org.sikuli.api.robot.desktop.DesktopMouse;
import org.sikuli.api.visual.Canvas;
import org.sikuli.api.visual.DesktopCanvas;

import static org.sikuli.api.API.*;

public class HelloWorldExample {

     public static void main(String[] args) throws MalformedURLException {

           // Open the main page of Google Code in the default web browser
           browse(new URL("http://code.google.com"));

           // Create a screen region object that corresponds to the default monitor in full screen 
           ScreenRegion s = new DesktopScreenRegion();

           // Specify an image as the target to find on the screen
           URL imageURL = new URL("http://code.google.com/images/code_logo.gif");                
           Target imageTarget = new ImageTarget(imageURL);

           // Wait for the target to become visible on the screen for at most 5 seconds
           // Once the target is visible, it returns a screen region object corresponding
           // to the region occupied by this target
           ScreenRegion r = s.wait(imageTarget,5000);

           // Display "Hello World" next to the found target for 3 seconds
           Canvas canvas = new DesktopCanvas();
           canvas.addLabel(r, "Hello World").display(3);

           // Click the center of the found target
           Mouse mouse = new DesktopMouse();
           mouse.click(r.getCenter());
     }
}

Также см. Как использовать Sikuli в ваших Java-программах для настройки.

4 голосов
/ 29 апреля 2011

Ну, я мог бы пройти все пиксели с помощью робота, но это должно быть быстрее, чем это.Гораздо быстрее.

Боюсь, что это именно то, что вам нужно сделать.

Если все пиксели должны быть белыми, вы могли бы сначала сделать шаги шириной 30 пикселей, и еслиВы найдете белый пиксель, скажем, 5 шагов пикселя, а затем, если эти пиксели тоже белого цвета, проверьте оставшиеся пиксели в квадрате.

Примерно так:

.        .        .        .        .        .



.        ..........        .        .        .
         ...... 
         .  .  .  .

         .  .  .  .
.        .        .        ..........        .
                           ..........
                           ..........
                           ..........
                           ..........
.        .        .        ..........
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...