2014-12-07 4 views
1

Я пытаюсь понять, как я могу использовать PIL в Python 2.7 для поиска по всему экрану определенного изображения и щелчка по нему. Я искал вокруг и не смог найти решение. Я хочу создать небольшой графический интерфейс с одной кнопкой посередине, которая при нажатии будет искать весь экран для предопределенного изображения. Как только изображение будет найдено, программа затем щелкнет по центру и закончит. Короче говоря, программа определит, присутствует ли изображение на экране пользователя и щелкните его.Использование PIL (Библиотека изображений Python) для обнаружения изображения на экране

Я нашел интересный бит на Sikuli, но это не помогает мне, потому что он неспособен экспортировать в .exe.

Образ, который будет искать программа, скорее всего будет находиться в одном и том же месте при каждом его поиске, но я не хотел бы жестко закодировать местоположение, поскольку он имеет потенциал для перемещения, и я не хочу это вопрос позже.

Что мне нужно, это метод кода, который я бы использовал для поиска изображения на экране и отправки шнуров в переменную.

Изображение Объяснение/пример: Image

эталонное изображение винтовки: Image2

+0

так что изображение на экране будет иметь одинаковый размер или разные, как эталонного изображения? –

+0

Да, это будет по-другому. Примерно вокруг того же размера. – Freddie

+0

Поиск точного изображения очень просто. Поиск аналогичного изображения требует алгоритма распознавания изображений и существенно сложнее. – Gabe

ответ

3

PIL неправильный инструмент для этой работы. Вместо этого вы должны посмотреть в openCV (с открытым исходным кодом компьютерное зрение), в котором есть фантастические привязки python. Вот ссылка на пример (в C, но должна быть легко повторить с питоном привязками), что делает то, что вы ищете, но даже позволяет изображению быть повернуто, масштабировать и т.д.

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

Редактировать:

Я предполагаю, что вы используете окна, так как ваш пример изображения выглядит как окно. В этом случае вы можете использовать:

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

затем используйте opencv для обработки изображения, чтобы найти дополнительное изображение, которое вы ищете.

Если вы хотите сделать это кросс-платформенный, то вам нужно будет использовать WxWidgets сделать Screengrab: https://stackoverflow.com/a/10089645/455532

+0

Я пытаюсь обнаружить изображение из окна программы. Он должен иметь возможность выполнять поиск по всему экрану. – Freddie

+0

исправленный ответ выше – Kyle

+0

Не могли бы вы подробнее рассказать о том, как я могу использовать его для поиска на экране. У меня настоящие проблемы. – Freddie