Sikuli在屏幕上检查多个相同的图像

时间:2013-10-27 03:44:54

标签: sikuli

我可以检查图像是否存在于exists()

但我想知道我是否可以检查同一图像是否出现在屏幕上不止一次,例如:

如果球存在,只需点击一个按钮......

如果球在屏幕上存在两次,请点击另一个按钮...任何想法?

5 个答案:

答案 0 :(得分:3)

你也可以使用Python的列表理解来做到这一点:

imageCount = len(list([x for x in findAll(image)]))

#the rest is like @Eugene's answer
if imageCount == 1:
    click(buttonA)
elif imageCount == 2:
    click(buttonB)
else:
    pass

答案 1 :(得分:3)

要检查屏幕上所有出现的图像,请使用以下内容,添加额外的点击以确认图像的确切位置。

Screen s = new Screen();
Iterator<Match> it = s.findAll(Imagepath);

while(it.hasNext()){
    System.out.println("the match is "+it.next().click());
}

或者你可以找到迭代器的长度。

答案 2 :(得分:2)

您可以使用Sikuli Region类的findAll method。示例代码如下所示:

def returnImageCount(image):
    count = 0
    for i in findAll(image):
        count += 1
    return count

imageCount = returnImageCount(image)

if imageCount == 1:
    click(buttonX.image)
elif imageCount == 2:
    click(buttonY.image)
else:
    pass

答案 3 :(得分:0)

使用Region对象的findall方法。它为您提供了所有匹配图像/模式的列表。 Sikuli文档有很好的使用细节。请参阅此处http://doc.sikuli.org/region.html#Region.findAll

答案 4 :(得分:0)

如果您想要计算窗口上某个图像的数量,您可以使用:

Image1 = ("Image1.png")
ImagesFound = list(findAll(Image1))
numberFound = len(ImagesFound)
print(numberFound)

如果您想在最前面的窗口上计算某个图像的数量,就像弹出窗口一样。
你可以使用:

Image1 = ("Image1.png")
appWindow = App.focusedWindow()
ImagesFound = list(appWindow.findAll(Image1))
numberFound = len(ImagesFound)
print(numberFound)