21
import pyautogui
print (pyautogui.locateCenterOnScreen("C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"))

它不返回坐标,而是返回None

4

8 回答 8

9

当我通过 pyautogui 内置函数而不是WIN+截屏时,我的问题得到了解决,Printscr因为如果我们通过WIN+截屏,Printscr那么与 pyautogui 内置函数相比,像素密度和其他图像相关数据可能会有所不同。
也许这件事对你有用,对我有用。
对于 Ex - wifi.pngwifi.png所以首先我截取了完整的屏幕截图并从完整的图像中裁剪了它然后我把它放在下面显示的代码中

import pyautogui
print(pyautogui.locateCenterOnScreen('wifi.png'))
于 2018-04-08T18:13:28.680 回答
7

似乎在屏幕上找不到与您的图像匹配的任何内容。

locateCenterOnScreen(image, grayscale=False)- 返回屏幕上第一个找到的图像实例的中心的 (x, y) 坐标。如果在屏幕上找不到,则返回 None。

于 2016-05-05T00:23:55.843 回答
2

最初的问题非常简单 - 库没有找到屏幕上表示的传递图像,因此返回而不是像它在 docs 中None所说的那样返回坐标。

但是,这里可能存在误解,特别是来自在该问题上发布赏金并在此处提出类似问题的用户。. 发表了评论

“照片在我的桌面上”

使用此函数时,您将文件名作为字符串传入。然后库加载图像文件并在屏幕上查找图片(而不是文件名)。 如果它在屏幕上可见,pyautogui.locatecentreonscreen()将寻找实际图像。它不会在桌面上查找文件,也不会查找与传递给它的图像同名的文件图标。

例子

假设您有一个名称flower.jpg包含以下图像的文件,该文件保存在您的桌面上。

在此处输入图像描述

在没有其他窗口打开的情况下,运行:

coords = pyautogui.locateCenterOnScreen('C:\\Richard\\Users\\flower.jpg')
print(coords)

结果是None

这是因为即使桌面上有一个名为 的图标,flower.jpg该图像也不会显示在我的屏幕上。即使该图标是花朵的小尺寸版本也是如此。

但是,如果我让图像可见(因为我正在准备这篇文章)并做同样的事情,我会得到坐标 - 例如:

在此处输入图像描述

如您所见 - 因为实际图像在屏幕上,所以库会找到它,并带有坐标524,621

总之,如果库没有找到屏幕上显示给用户的图像,它将返回 None。请注意,图像必须在代码运行时对用户可见。它不会在您的桌面上找到图标或类似图标,也不会在“隐藏”在另一个窗口后面的窗口中找到图像。那是你想要做的吗?

于 2016-05-11T15:03:13.943 回答
1

您确定图像与图标的大小相同吗?

如果没有pyautogui.locateCenterOnScreen()将提高TypeError: 'NoneType' object is not iterable

还要确保完整的图标可见并且看起来与图像相同:"C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"

希望问题得到解决!

于 2016-05-06T13:21:40.030 回答
0

如果由于图像问题无法使用pyautogui.locateCenterOnScreen(),请尝试使用截图工具(如果您在 Windows 上)进行截图。它可以工作。还要确保您已下载“枕头”模块

于 2020-09-27T04:39:48.100 回答
0

很好的解释,有没有比 pyautogui 更好的库?我的意思是它想要在屏幕上显示完全相同的图片。我们有时需要类似的。– GLHF 2016 年 5 月 11 日 15:45

尝试使用此代码行:

pyautogui.locateCenterOnScreen("yourscreenshot.PNG", confidence=0.9)

我相信置信度范围为 0.1-0.9。除非您有几张看起来几乎相似的图片,否则这可能会解决异常。如果这不起作用,请尝试使用更多/更少的原始图像制作第二个屏幕截图并编写以下代码:

try:
    pyautogui.locateCenterOnScreen("yourscreenshot.PNG", confidence=0.9)
except TypeError:
    pyautogui.locateCenterOnScreen("yourscreenshot2.PNG", confidence=0.9)

这将再次尝试使用稍微不同的图片,并希望不会返回 TypeError。

于 2019-09-25T15:28:06.870 回答
0

根据 Don Kirby 所说的,在屏幕上没有找到匹配的图像。例如,您可以在 Windows 照片库(或Tk)中打开图像,然后pyautogui找到它。

于 2016-05-09T15:27:28.850 回答
0

尝试这个 :

pip install opencv-contrib-python

运行相同的代码让我很困惑:

coords =pyautogui.locateCenterOnScreen('C:\\test.jpg')

在两个不同的虚拟环境(X 和 Y,几乎相同)中返回NonePoint(x=1543, y=461)

我阅读了 Aleks 的答案,并猜测它在当前环境中confidence隐式使用参数opencv-contrib-python(Y 有但 X 没有)。

我没有深入研究,只是安装 opencv-contrib-python在虚拟环境 X 中并解决了我的问题。

于 2021-12-28T06:06:14.460 回答