2

操作を実行できるように、actualImage 内の一致する画像の座標を取得する必要があります。ただし、以下の 2 つの方法を試しましたが、どちらもうまくいかないようです。

アプローチ1:以下を使用して、一致を見つけることができますが、返される座標は、一致する画像の幅と高さだけです(これはすでにわかっています)。実際の画像内で同じ位置を取得したい。

    BufferedImage actualImg = ImageIO.read(new File("C:/Images/SrcImg.PNG"));
    ImageTarget actualTgt = new ImageTarget(actualImg);
    BufferedImage searchImg = ImageIO.read(new File("C:/Images/TgtImg.PNG"));       
    ImageTarget searchTgt = new ImageTarget(searchImg);
    ScreenRegion scrReg = new StaticImageScreenRegion(actualTgt.getImage());
    ScreenRegion resReg = scrReg.find(searchTgt);
    ScreenLocation center = resReg.getCenter();
    System.out.println(":getElementFromImage: x_loc,y_loc =["+center.getX()+","+center.getY()+"]");

アプローチ 2: 以下のコードでは、sikulix Finder で試しました。ただし、この src.hasNext() は true を返しましたが、src.next() は nullpointer 例外をスローしました。ここで何が問題なのかわかりません:

    Finder src = new Finder("C:/Images/SrcImg.PNG");
    Pattern pat = new Pattern("C:/Images/TgtImg.PNG").similar(0.5);
    src.find(pat);
    Match m;
    while( src.hasNext()) 
        m = src.next();
    src.destroy();

java.lang.NullPointerException
at org.sikuli.script.Finder.next(Finder.java:484)
at com.work.ImageFinder.main(ImageFinder.java:38)

私はすでにこれを機能させるためにかなりの時間を費やしました。どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

1

以下のように Region を Finder に渡した後、正常に動作します。

Finder src = new Finder("C:/Images/SrcImg.PNG", new Region(0,0,<width>,<height>))
Pattern pat = new Pattern("C:/Images/TgtImg.PNG").similar(0.5);
src.find(pat);
Match m;
while( src.hasNext()) 
    m = src.next();
src.destroy();

詳細については、次のリンクを参照 してください。Sikuli を使用して、GUI レス モードでイメージが同じであることをアサートすることはできますか?

于 2018-10-09T06:08:08.073 に答える