Pyautogui.locateCenterOnScreen() возвращает None вместо координат
import pyautogui
print (pyautogui.locateCenterOnScreen("C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"))
Вместо возврата координат возвращается None
.
Ответы
Ответ 1
Кажется, что не удалось найти что-либо, соответствующее вашему изображению на экране.
locateCenterOnScreen(image, grayscale=False)
- Возвращает (x, y) координаты центра первого найденного экземпляра изображения на экране. Возвращает Нет, если не найден на экране.
Ответ 2
Моя проблема решена, когда я сделал снимок экрана с помощью встроенной функции pyautogui, а не с помощью WIN+Printscr, потому что, если мы сделали снимок экрана с помощью WIN+Printscr, плотность пикселей и другие данные, связанные с изображением, могут отличаться от встроенной функции pyautogui. Может быть, это сработало для вас, у меня сработало
Для Ex - wifi.png
, поэтому сначала я сделал полный скриншот и обрезал его на этом полном изображении, а затем вставил его в код, показанный ниже
import pyautogui
print(pyautogui.locateCenterOnScreen('wifi.png'))
Ответ 3
Исходная задача довольно проста - библиотека не находит переданное изображение на экране и поэтому возвращает None
, а не координаты, поскольку она говорит, что она будет в документах.
Однако здесь есть возможное недоразумение, в частности от пользователя, который разместил щебет по этому вопросу и задал здесь аналогичный вопрос.. Был сделан комментарий
"Фотографии находятся на моем рабочем столе"
Когда вы используете эту функцию, вы передаете имя файла в виде строки. Затем библиотека загружает файл изображения и ищет изображение на экране (а не имя файла). pyautogui.locatecentreonscreen()
будет искать фактическое изображение, если оно отображается на экране. Он не ищет файлы на рабочем столе или значки файлов с тем же именем, что и изображение, переданное ему.
Пример
Скажем, у вас есть файл с именем flower.jpg
, содержащий следующее изображение, сохраненное на вашем рабочем столе.
![введите описание изображения здесь]()
Без открытия других окон запустите:
coords = pyautogui.locateCenterOnScreen('C:\\Richard\\Users\\flower.jpg')
print(coords)
Результат None
Это связано с тем, что это изображение не отображается на моем экране , даже если значок находится на рабочем столе с именем flower.jpg
. Это верно, даже если этот значок представляет собой небольшую версию цветка.
Однако, если я оставляю изображение видимым (поскольку я готовлю это сообщение) и делаю то же самое, я получаю координаты - например:
![введите описание изображения здесь]()
Как вы видите - поскольку фактическое изображение находится на экране, библиотека находит его с координатами 524,621
В общем, если библиотека не находит изображение, отображаемое пользователю на экране, оно вернет None. Обратите внимание, что изображение должно быть видимым пользователю в момент запуска кода. Он не найдет значок на вашем рабочем столе или аналогичный, или изображение в окне, которое "скрыто" за другим. Это то, что вы пытаетесь сделать?
Ответ 4
Вы уверены, что изображение имеет тот же размер, что и значок?
Если не pyautogui.locateCenterOnScreen()
поднимет TypeError: 'NoneType' object is not iterable
Также убедитесь, что полный значок отображается и выглядит так же, как и изображение: "C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"
Надеемся, что проблема решена!
Ответ 5
Построение того, что сказал Дон Кирби, на экране не было найдено соответствующего изображения. Вы можете открыть изображение, например, в Windows Photo Gallery (или Tk
), а затем pyautogui
найдет его.
Ответ 6
Хорошее объяснение, есть ли библиотека, которая работает лучше, чем pyautogui? Я имею в виду, что он хочет точно такую же картинку на экране. Нам нужно подобное иногда. - GLHF 11 мая '16 в 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.