PyAutoGUI 定位命令返回错误的图像识别坐标

Posted

技术标签:

【中文标题】PyAutoGUI 定位命令返回错误的图像识别坐标【英文标题】:PyAutoGUI locate command returning incorrect coordinates for image recognition 【发布时间】:2017-09-22 05:21:00 【问题描述】:

我正在尝试使用pyautogui.locateCenterOnScreen() 在屏幕上找到图像的确切点,但是每当返回坐标时,它似乎总是大两倍(即给出(2026, 722),但实际上是@ 987654325@)。我正在使用运行 macOS Sierra 的带有 Retina Display 的 Macbook Pro 2016。任何建议如何解决这个问题?提前致谢。

Image Recognition Result Screenshot

Image to locate on screen

我希望这个屏幕截图能帮助解决我的问题。

【问题讨论】:

【参考方案1】:
import pyautogui
position = pyautogui.locateCenterOnScreen('image.png')
print(position.x/2,position.y/2)
pyautogui.click(position.x/2,position.y/2)

【讨论】:

如果你能解释一下为什么这是一个解决方案会有所帮助【参考方案2】:

Pyautogui 使用屏幕截图来查找屏幕上内容的位置。带有 Retina 显示器的 Mac 的问题是屏幕输出的像素数量是双倍的,以利用系统更大的像素密度来获得更清晰的图像。因此,当你截取屏幕截图时,你会得到一个包含双倍数量的图像的像素比来自非视网膜 Mac 的相同图像。我目前正在研究是否可以调整图像大小并仍然能够找到匹配项(如果不使用 cv2 的模糊搜索,一个像素会消失并且没有匹配项) source

【讨论】:

由于某种原因它确实很好用,但是在某些情况下它不起作用。你能帮忙吗?谢谢。【参考方案3】:

由于某种原因,我的 m1 Macbook 不喜欢这些答案,所以这就是我想出的。

position2 = position[0]/2, position[1]/2, position[2]/2, position[3]/2
pyautogui.moveTo(position2)
pyautogui.click()

【讨论】:

【参考方案4】:

这很可能不是您可以通过查看您正在使用的代码或模块来解决的问题。最有可能的问题是您以错误的方式解释某些内容。

如果您提供屏幕截图和要在其上定位的图像,则无需猜测即可轻松提供帮助。

【讨论】:

您好,我已经编辑并添加了屏幕截图。希望这可以提供帮助。谢谢【参考方案5】:

我的 MacBook 也有这个问题。我只能认为它与 MacBook 以及它发送屏幕信息的方式有关。

作为一种解决方法,我刚刚将坐标除以 2。

【讨论】:

以上是关于PyAutoGUI 定位命令返回错误的图像识别坐标的主要内容,如果未能解决你的问题,请参考以下文章

pyautogui提高图片定位识别的精准度

图像识别入门6 车牌定位方法

为啥 pyautogui.click() 返回类型错误?

pyautogui 文档:鼠标控制

在屏幕上定位颜色位置?

C#裁剪图像返回错误的坐标