0

有没有一种快速的方法可以在屏幕上找到图像?

我确实喜欢这样:(在那之前我用 Robot.createScreenCapture(...) 捕获了屏幕)

public static Point search(BufferedImage big, BufferedImage small) {
    Robot robot = null;
    try {
        robot = new Robot();
    } catch (AWTException e) {
        e.printStackTrace();
    }
    long time=System.currentTimeMillis();
    for (int x = 0; x < big.getWidth() - small.getWidth(); x++) {
        for (int y = 0; y < big.getHeight() - small.getHeight(); y++) {
            if (compare(x, y, big, small)) {
                return new Point(x, y);
            }
        }
    }
    System.out.println(System.currentTimeMillis()-time);
    return null;
}

private static boolean compare(int xs, int ys, BufferedImage img1, BufferedImage img2) {
    for (int x = 0; x < img2.getWidth(); x++) {
        for (int y = 0; y < img2.getHeight(); y++) {
            if (img1.getRGB(x + xs, y + ys) != img2.getRGB(x, y)) {
                return false;
            }
        }
    }
    return true;
}

但有时只需要 200 毫秒,但有时需要 10000 毫秒!:(

编辑:如果有人知道 Autohotkey,它是另一种编程语言,并且有一个名为“ImageSearch”的函数可以在几毫秒内找到这些图像......(我认为基于 C++)

4

1 回答 1

3

两种可能的情况:

  1. 您使用的算法并不是很快:它是一个 O(mn) 算法,因此您可能应该寻找更好的算法,例如 KMP 算法。

  2. 在搜索图像之前,可能先压缩它们然后搜索,并使用另一个检查来确保压缩不会影响算法。一个简单的“删除每隔一行”应该可以大大加快程序的速度。

于 2012-09-20T20:19:02.407 回答