2014-12-07 158 views
1

我想了解如何在Python 2.7中使用PIL来搜索特定图像的整个屏幕并单击它。我一直在四处搜寻,一直未能找到解决方案。我想创建一个小图形用户界面,在它的中间有一个按钮,单击它时会搜索整个屏幕以查找预定义的图像。一旦找到图像,程序将点击它的中心并结束。简而言之,程序会检测用户屏幕上是否存在图像并点击它。使用PIL(Python图像库)来检测屏幕上的图像

我在Sikuli上找到了一个有趣的位,但是这并不能帮助我,因为它无法导出到.exe。

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

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

图片说明/例子:步枪 Image

参考图像: Image2

+0

所以屏幕上的图像将是相同的尺寸或不同的参考图像的? – 2014-12-07 15:12:15

+0

是的,它会有所不同。粗略地大约相同的大小。 – Freddie 2014-12-07 15:29:55

+0

搜索一个确切的图像很容易。寻找一个相似的图像需要一个图像识别算法,并且要困难得多。 – Gabe 2014-12-07 15:48:46

回答

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

+0

我试图从程序窗口外部检测图像。它需要能够搜索整个屏幕。 – Freddie 2014-12-07 19:07:41

+0

ammended above – Kyle 2014-12-07 19:11:12

+0

您可以详细了解我如何使用它来搜索屏幕。我有真正的问题。 – Freddie 2014-12-08 01:35:46