使用PIL(Python图像库)检测屏幕上的图像

使用PIL(Python图像库)检测屏幕上的图像,python,python-imaging-library,Python,Python Imaging Library,我试图理解如何在Python2.7中使用PIL在整个屏幕上搜索某个图像并单击它。我一直在四处寻找,没有找到解决办法。我想创建一个小的GUI,中间有一个按钮,点击时会在整个屏幕上搜索预定义的图像。一旦找到图像,程序将单击图像中心并结束。简而言之,程序将检测用户屏幕上是否存在图像并单击它 我确实在Sikuli上找到了一点有趣的东西,但这对我没有帮助,因为它无法导出到.exe 该程序每次搜索时查找的图像很可能都在同一个位置,但我不想硬编码该位置,因为它可能会移动,我不希望这成为以后的问题 我需要的是代

我试图理解如何在Python2.7中使用PIL在整个屏幕上搜索某个图像并单击它。我一直在四处寻找,没有找到解决办法。我想创建一个小的GUI,中间有一个按钮,点击时会在整个屏幕上搜索预定义的图像。一旦找到图像,程序将单击图像中心并结束。简而言之,程序将检测用户屏幕上是否存在图像并单击它

我确实在Sikuli上找到了一点有趣的东西,但这对我没有帮助,因为它无法导出到.exe

该程序每次搜索时查找的图像很可能都在同一个位置,但我不想硬编码该位置,因为它可能会移动,我不希望这成为以后的问题

我需要的是代码方法,我将使用它来搜索屏幕上的图像,并将跳线发送回变量

图像说明/示例:

步枪的参考图像:
PIL是此作业的错误工具。相反,您应该研究openCV(开源计算机视觉),它具有出色的python绑定。下面是一个链接,指向一个示例(在C语言中,但使用python绑定应该很容易重做),该示例实现了您所需的功能,但甚至允许旋转、缩放图像等

编辑:

我假设您使用的是windows,因为您的示例图像看起来像windows。在这种情况下,您可以使用:

from PIL import ImageGrab
pil_img = ImageGrab.grab()
opencv_img = numpy.array(pil_img)
然后使用opencv处理图像,以找到要查找的子图像


如果您想跨平台进行此操作,那么您需要使用wxWidgets来进行屏幕抓图:

即使我也想这样做,但使用不同的模块-pyautogui。我终于找到了解决问题的办法,我相信这个办法也会对你有所帮助。 您只需转到并完全阅读定位函数主题
您将能够解决您的问题。

因此屏幕上的图像将与参考图像大小相同或不同?是的,它将不同。大致相同大小。搜索精确的图像很容易。搜索相似的图像需要一个图像识别算法,而且难度很大。不,每次都是完全相同的图像。我展示了来复枪,因为我还没有制作另一个。即使它是一个相同的图像,如果它大小不同,这将是一个困难的任务,可能需要更复杂的算法。我正在尝试从程序窗口外检测图像。它需要能够搜索整个屏幕。上面的答案是:你能详细介绍一下我如何使用它搜索屏幕吗。我遇到了真正的问题。嗨,Yashas P B,欢迎!请尝试写完整的解释(如果可能的话),而不是仅仅链接-这些是论坛的指示:)好的,我一定会从下次解释。这是我第一次回答问题。所以,谢谢你