【问题标题】:Using PIL (Python Image Library) to detect image on screen使用 PIL(Python 图像库)检测屏幕上的图像
【发布时间】:2014-12-07 15:06:43
【问题描述】:

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

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

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

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

图片说明/示例:

步枪参考图片:

【问题讨论】:

  • 所以屏幕上的图像将与参考图像大小相同或不同?
  • 是的,它会有所不同。大小差不多。
  • 搜索准确的图像很容易。搜索相似图像需要图像识别算法,而且难度要大得多。
  • 不,每次都是完全相同的图像。我展示了这支步枪,因为我还没有制作另一支。
  • 即使是同一张图片,如果大小不同,这将是一项艰巨的任务,可能需要更复杂的算法

标签: python python-imaging-library


【解决方案1】:

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.windows。在这种情况下,您可以使用:

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

然后使用opencv对图像进行处理,找到你要找的子图像。

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

【讨论】:

  • 我正在尝试从程序窗口外检测图像。它需要能够搜索整个屏幕。
  • 上面的修正答案
  • 您能否详细说明如何使用它来搜索屏幕。我遇到了真正的问题。
  • opencv 链接现在好像坏了
【解决方案2】:

即使我想做同样的事情,但使用不同的模块 - pyautogui。我终于找到了我的问题的解决方案,我相信这个解决方案也会对你有所帮助。 您只需转到 this webpage 并完整阅读 定位功能 主题 并且您将能够解决您的问题。

【讨论】:

  • 嗨,Yashas PB,欢迎!请尝试写完整的解释(如果可能的话),而不仅仅是链接 - 这些是论坛的指令:)
  • 好的,下次我一定会解释的。这是我第一次回答问题。所以,谢谢
猜你喜欢
  • 2021-04-16
  • 1970-01-01
  • 2015-11-29
  • 2012-09-16
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
相关资源
最近更新 更多