0

私はこれを機能させるために何時間も努力してきましたが、何らかの理由で一致が見つかりません。任意の画像でテストできますが、画面の左上隅のスクリーンショット (1000px x 1000px) を取得し、その中で指定された画像を見つける必要があります。どんな助けでも大歓迎です!

        import java.awt.Rectangle;
        import java.awt.Robot;
        import java.awt.image.BufferedImage;
        import java.io.File;
        import java.io.IOException;

        import javax.imageio.ImageIO;


        public class ImageRobotTester {

            /**
             * @param args
             */
            public static void main(String[] args) {
                ImageRobot i = new ImageRobot();
                try {
                    BufferedImage settingsImage = ImageIO.read(new File("images/Dex.png"));
                    Robot r = new Robot();
                    BufferedImage screen = r.createScreenCapture(new Rectangle(0, 0, 1000, 1000));

                    i.subImage(settingsImage, screen);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


            }

        }
      import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;


public class ImageRobot {

    public ImageRobot() {
        // TODO Auto-generated constructor stub
    }

    public void subImage(BufferedImage needle, BufferedImage hayStack)
    {
        int xMatch = 0;
        int yMatch = 0;
        int possMatches = 0;
        try {
            for(int j = 0; j < hayStack.getHeight() - needle.getHeight(); j++)
            {
                for(int i = 0; i < hayStack.getWidth() - needle.getWidth(); i++)
                {
                    BufferedImage hayStackSub = hayStack.getSubimage(i, j, needle.getWidth(), needle.getHeight());
                    if(hayStackSub.equals(needle))
                    {
                        System.out.println("match!");
                        xMatch = i;
                        yMatch = j;
                    }

                }
            }
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
            System.out.println("Out of bounds! (" + xMatch + ", " + yMatch + ")");
        }

        System.out.println("(" + xMatch + ", " + yMatch + ")");
    }

}
4

1 に答える 1

2

間違っていたら訂正してください。でも、ここで何らかの画像認識をしようとしているのですか? 参照画像とピクセルごとに一致するサブ画像を検索しているわけではありませんが、類似の画像を検索していますか? 右?

この場合、大きな画像の上に小さな「ウィンドウ」を移動する必要があります (二重の for ループで現在行っているように) が、「equals」を使用する代わりに、適切に訓練されたニューラル ネットワークを使用して、画像が探しているのはそのウィンドウ内です。

NN ベースの画像認識エンジンを構築する方法の詳細については、このチュートリアルを参照してください。

http://neuroph.sourceforge.net/image_recognition.html

于 2012-07-27T03:22:14.377 に答える