Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在屏幕上查找图像_Java_Image_Sikuli - Fatal编程技术网

Java 在屏幕上查找图像

Java 在屏幕上查找图像,java,image,sikuli,Java,Image,Sikuli,我是java新手。我正在尝试为一个简单的迷你游戏开发一个机器人(或培训师,随便什么),我需要分析屏幕上的图像并按下相应的动作。因此:- 我第一次尝试使用sikuli ScreenRegion来实现这一点,但并没有完全按照预期进行。我尝试的是这样的:- if(arrowSet.find(oneDown)!=null) { r.keyPress(KeyEvent.VK_DOWN); r.keyRelease(KeyEvent.VK_DOWN); r.delay(20); }

我是java新手。我正在尝试为一个简单的迷你游戏开发一个机器人(或培训师,随便什么),我需要分析屏幕上的图像并按下相应的动作。因此:-

我第一次尝试使用sikuli ScreenRegion来实现这一点,但并没有完全按照预期进行。我尝试的是这样的:-

if(arrowSet.find(oneDown)!=null)
{
    r.keyPress(KeyEvent.VK_DOWN);
    r.keyRelease(KeyEvent.VK_DOWN);
    r.delay(20);
} 

但它只是跳转到行动,即使条件是假的。在这种情况下,我的ScreenRegion应用程序是否错误?或者我应该使用与Sikuli不同的东西吗?

< p>如果不需要使用java,并且在Windows下工作,你可以考虑使用-python工具/库来进行UI自动化。它允许对图像进行操作

例如,要确定屏幕上是否存在图像,请执行以下操作:

Image("arrow_screenshot1.png").exists() # returns True or False
要单击图像,请执行以下操作:

click(Image("arrow_screenshot1.png"))
要查找图像坐标/中心,请执行以下操作:

Image("arrow_screenshot1.png").x # returns x-coordinate
Image("arrow_screenshot1.png").y # returns y-coordinate
Image("arrow_screenshot1.png").center # returns Point object
要等待图像出现在屏幕上,请执行以下操作:

wait_until(Image("arrow_screenshot1.png").exists)
等等

我认为使用你可以很容易地达到你所需要的


免责声明:我是一个开发人员

< p>如果不需要使用java,并且在Windows下工作,你可以考虑使用-python工具/库来进行UI自动化。它允许对图像进行操作

例如,要确定屏幕上是否存在图像,请执行以下操作:

Image("arrow_screenshot1.png").exists() # returns True or False
要单击图像,请执行以下操作:

click(Image("arrow_screenshot1.png"))
要查找图像坐标/中心,请执行以下操作:

Image("arrow_screenshot1.png").x # returns x-coordinate
Image("arrow_screenshot1.png").y # returns y-coordinate
Image("arrow_screenshot1.png").center # returns Point object
要等待图像出现在屏幕上,请执行以下操作:

wait_until(Image("arrow_screenshot1.png").exists)
等等

我认为使用你可以很容易地达到你所需要的



免责声明:我是的开发者之一

伙计们,我知道了!似乎sikuli的图像识别是模糊的。它不能与
targetImage.setMinRank(1.00)
一起工作,但是当我尝试使用
targetImage.setMinRank(0.99)
运行程序时,它运行起来非常流畅。谢谢你们的帮助。

大家想好了!似乎sikuli的图像识别是模糊的。它不能与
targetImage.setMinRank(1.00)
一起工作,但是当我尝试使用
targetImage.setMinRank(0.99)
运行程序时,它运行起来非常流畅。感谢您的帮助。

显然,如果s.find在定义的区域中找不到图像,它将返回Null,因此您的代码“if(s.find(x))”一开始就不是有效的java…我忍不住认为您咬了很多。但这取决于环境——你想找到的图像是出现在某些设定的位置上,还是可以在屏幕上的任何地方缩放和旋转?@Akdavevil:我的代码就像你说的那样。@Humungus:屏幕上的任何地方,不。缩放和旋转,不。通常我在编写类似的机器人时,首先要编写一个检测系统,检测给定图像的坐标。该系统是折叠的,第一阶段是使用robot类简单地转储大量屏幕截图,可能为屏幕截图提供有关游戏状态的信息。第二阶段是分析图像中出现的问题,这可以通过蛮力像素比较来完成,这确实很慢,但这是在实际开发not之前要做的事情,所以我个人认为它应该是简单而愚蠢的。显然,如果在定义的区域中找不到图像,s.find将返回Null,因此您的代码“if(s.find(x))”从一开始就不是有效的java…我忍不住认为您已经咬了很多。但这取决于环境——你想找到的图像是出现在某些设定的位置上,还是可以在屏幕上的任何地方缩放和旋转?@Akdavevil:我的代码就像你说的那样。@Humungus:屏幕上的任何地方,不。缩放和旋转,不。通常我在编写类似的机器人时,首先要编写一个检测系统,检测给定图像的坐标。该系统是折叠的,第一阶段是使用robot类简单地转储大量屏幕截图,可能为屏幕截图提供有关游戏状态的信息。第二阶段是分析图像中出现的问题,这可以通过蛮力像素比较来完成,这确实很慢,但这是在实际开发not之前要做的事情,所以我个人认为这应该是简单而愚蠢的。好主意,如果存在图像,我必须按箭头键怎么办?还有,有控制语句吗?更简单。您只需按(左)或(上)等键,具体取决于您需要按的箭头键。Automa命令的完整列表可以在控制语句中找到,如If?因为这个程序离不开它们,所以你当然可以使用控制语句。只是一个Python库—您可以使用所有Python语言结构(if语句、while循环等)及其库。Automa命令只是Python函数,Automa附带Python解释器。看看一些高级用法示例:我对Python了解不多(准确地说,是null)。不过,我还是要试试。我明白了#如果但如果结束在哪里?好主意,如果有图像存在,我必须按箭头键怎么办?还有,有控制语句吗?更简单。您只需按(左)或(上)等键,具体取决于您需要按的箭头键。Automa命令的完整列表可以在控制语句中找到,如If?因为这个程序离不开它们,所以你当然可以使用控制语句。只是一个Python库—您可以使用所有Python语言结构(if语句、while循环等)及其库。Automa命令只是Python函数,Automa附带Python解释器。看看一些高级用法示例:我对Python了解不多(准确地说,是null)。不过,我还是要试试。我明白了#如果但是如果结束在哪里?你的目标图像是什么格式的?如果以有损格式保存,则可能无法实现完美匹配。(Sikuli bug也是可能的,但我使用的脚本要求完美匹配,并且工作正常。)你的目标图像是什么格式的?如果以有损格式保存,则可能无法实现完美匹配。(Sikuli bug是艾尔