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

时间:2014-12-07 15:06:43

标签: python python-imaging-library

我试图了解如何在Python 2.7中使用PIL在整个屏幕上搜索某个图像并单击它。我一直在寻找,但一直无法找到解决方案。我想创建一个小GUI,其中间有一个按钮,单击该按钮将在整个屏幕上搜索预定义图像。找到图像后,程序将点击它的中心并结束。简而言之,程序将检测用户屏幕上是否存在图像并单击它。

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

程序寻找的图像很可能在每次搜索时都在同一个地方,但我不想对该位置进行硬编码,因为它有可能移动,我不希望这样后来成为一个问题。

我需要的是用于在屏幕上搜索图像并将线索发送回变量的代码方法。

图片说明/示例: Image

步枪参考图片: Image2

2 个答案:

答案 0 :(得分:3)

PIL是这项工作的错误工具。相反,你应该研究openCV(开源计算机视觉),它有很棒的python绑定。这是一个示例的链接(在C中,但应该很容易用python绑定重做),它可以满足您的要求,但甚至允许图像旋转,缩放等等。

http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html http://docs.opencv.org/doc/tutorials/features2d/detection_of_planar_objects/detection_of_planar_objects.html

编辑:

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

from PIL import ImageGrab
pil_img = ImageGrab.grab()
opencv_img = numpy.array(pil_img)

然后使用opencv处理图像以查找您要查找的子图像。

如果您想要跨平台,那么您将需要使用wxWidgets来执行screengrab:https://stackoverflow.com/a/10089645/455532

答案 1 :(得分:0)

即使我想做同样的事情,但是使用不同的模块-pyautogui。我终于找到了解决我问题的方法,并且我相信该方法也可以为您提供帮助。 您只需要转到this webpage并完整阅读 locate function 主题 就能解决您的问题。