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 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.