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

Fre*_*die 8 python python-imaging-library

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

我确实在 Sikuli 上发现了一个有趣的地方,但这对我没有帮助,因为它无法导出到 .exe。

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

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

图片说明/示例: 图片

步枪参考图: 图片2

小智 6

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,因为您的示例图像看起来像 window.window。在这种情况下,您可以使用:

from PIL import ImageGrab
pil_img = ImageGrab.grab()
opencv_img = numpy.array(pil_img)
Run Code Online (Sandbox Code Playgroud)

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

如果你想做这个跨平台,那么你需要使用 wxWidgets 来做截屏:https ://stackoverflow.com/a/10089645/455532