pyautogui.locateCenterOnScreen() 返回 None 而不是坐标

问题描述 投票:0回答:9
import pyautogui
print (pyautogui.locateCenterOnScreen("C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"))

它不返回坐标,而是返回

None

python python-3.4 pyautogui
9个回答
11
投票

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

import pyautogui
print(pyautogui.locateCenterOnScreen('wifi.png'))

7
投票

似乎无法找到任何与屏幕上的图像相匹配的内容。

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


2
投票

最初的问题非常简单 - 库找不到传递到屏幕上的图像,因此返回

None
而不是文档中所说的 的坐标。

但是,这里可能存在误解,特别是来自在该问题上发布赏金并在此提出

类似问题的用户。。有评论了

“图片在我的桌面上”

使用此函数时,您将文件名作为字符串传递。然后,库加载图像文件并在屏幕上查找图片(而不是文件名)。

pyautogui.locatecentreonscreen()

 将查找 
实际图像(如果它在屏幕上可见)。它不会查找桌面上的文件或与传递给它的图像同名的文件图标。

示例

假设您有一个名为

flower.jpg

 的文件,其中包含以下图像,保存在桌面上。

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

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

None


这是因为该图像未显示在我的屏幕上

,即使桌面上有一个名为 flower.jpg

 的图标。即使该图标是花朵的小比例版本也是如此。

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

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

524,621


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


1
投票
您确定图像与图标大小相同吗?

如果没有

pyautogui.locateCenterOnScreen()

将会提高
TypeError: 'NoneType' object is not iterable


还要确保完整的图标可见并且看起来与图像相同:

"C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"



希望问题能解决!


0
投票
根据 Don Kirby 的说法,

在屏幕上没有找到匹配的图像。例如,您可以在 Windows 照片库(或 Tk

)中打开图像,然后 
pyautogui
 就会找到它。


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。


0
投票
如果由于图像问题而无法使用

pyautogui.locateCenterOnScreen()

,请尝试使用截图工具(如果您使用的是Windows)来截图。它可以。
另请确保您已下载“Pillow”模块


0
投票
试试这个:

pip install opencv-contrib-python


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

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


在两个不同的虚拟环境(X和Y,几乎相同)返回

None

Point(x=1543, y=461)

我读了Aleks的答案,并猜测它在当前环境中的

confidence

时隐式使用参数
opencv-contrib-python
(Y有但X没有)。

我没有深入研究,只是在虚拟环境 X 中安装了

opencv-contrib-python

 并解决了我的问题。


0
投票
无需截图,默认情况下您可以调整置信度参数,它仅在图像 100% 匹配时返回。你能做的是

pic_location = pyautogui.locateOnScreen("edge-pic.png",confidence=0.9)
但是为此你需要导入 opencv-python 包
使用命令。

pip install opencv-python
    
© www.soinside.com 2019 - 2024. All rights reserved.