在Java中使用sikuli查找匹配图像的坐标

时间:2018-10-08 03:24:41

标签: sikuli sikuli-script sikuli-x

我需要获取实际图像中匹配图像的坐标,以便可以对其执行操作。但是,我尝试了以下两种方法,但两种方法似乎都无效:

方法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()返回的是真正的BUT,但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)

我已经花了很多时间来完成这项工作。任何帮助将非常感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

将“区域”传递给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();

更多详细信息,请参见以下链接: Is it possible to use Sikuli to assert that images are the same in GUI-less mode?