from PIL import Image
def find_rgb(imagename, r_query, g_query, b_query):
img = Image.open(imagename)
pix = img.load()
coordinates= []
for x in range(img.size[0]):
for y in range(img.size[1]):
r, g, b = pix[x,y]
if matching_algo(r, g, b, r_query, g_query, b_query):
# print("{},{} contains {}-{}-{} ".format(x, y, r, g, b))
coordinates.append((x, y))
return(coordinates)
def matching_algo(r, g, b, r_query, g_query, b_query):
if r == r_query and g == g_query:
return True
elif r == r_query and b == b_query:
return True
elif b == b_query and g == g_query:
return True
else:
return False
if __name__== "__main__":
find_rgb('dead_parrot.jpg', 255, 255, 0)
Give this a try, you can improve my matching algorithm implementation.
I removed your convert() code and used load() instead
Параметры цвета
Websafe:
Выбранные цвета:
При работе с изображениями часто требуется точно определить цвет пиксела. Это нужно для коррекции изображения или в дизайнерских работах для настройки цветовой гаммы фона, панелей или кнопок своей страницы в интернете или сайта.
Этот сервис позволит вам узнать цвет точки онлайн без скачивания и установки дополнительных программ. Работая в нашем сервисе онлайн пипетка, вы быстро и легко сможете узнать цвет любого фрагмента изображения.
Для этого необходимо загрузить картинку на сайт. Для загрузки файла, нажмите кнопку «Обзор». Выберите нужный файл с изображением и нажмите «Загрузить». Как только картинка загрузится, вы увидите её на экране. Затем нужно навести курсор на тот пиксель, цвет которого вы хотите определить. В отдельном окне вы сможете увидеть цвет пикселя, а в поле «Текущее значение» отобразится соответствующий номер пикселя в HTML и RGB цвета пикселя.
Сервис предусматривает сохранение кода цвета в формате HTML и RGB цвета. Для этого нужно навести курсор на нужный пиксель и щелкнуть левой кнопкой мыши. В поле «Сохраненные значения» в отдельном окне вы сможете увидеть цвет пикселя, а так же сохраненные значения кода пикселя в формате HTML и RGB цвета.
-4 / 26 / 9 Регистрация: 06.03.2015 Сообщений: 209 |
|
1 |
|
Поиск определенного пикселя на экране25.02.2017, 23:04. Показов 31456. Ответов 20
Всем привет. Пишу игрового бота. Буду благодарен за помощь.
0 |
-4 / 26 / 9 Регистрация: 06.03.2015 Сообщений: 209 |
|
01.03.2017, 22:00 [ТС] |
2 |
Попробовал пропарсить циклом цвета пикселей на нужной мне части экрана… Так-то работает, но ждать минут 10-15 на парсинг большей части пикселей на экране…
0 |
4607 / 2028 / 359 Регистрация: 17.03.2012 Сообщений: 10,086 Записей в блоге: 6 |
|
02.03.2017, 10:11 |
3 |
Dave_, если делать оптимально, то не может там быть 10-15 минут. Что парсите?
0 |
Dave_ -4 / 26 / 9 Регистрация: 06.03.2015 Сообщений: 209 |
||||
02.03.2017, 17:01 [ТС] |
4 |
|||
На данный момент все до чего додумался мой не шибко опытный мозг, то это до 2-ух циклов фор
Что нужно: представь себе кусок экрана. Размер этого куска 1080х870. Вся часть этого экрана белая, однако где-то на ней существуют черные точки(она может быть как одна, так и несколько). Необходимо: зная точный RGB цвет белых точек найти их точные координаты на экране. Желательно сделать так, что бы сам цикл проверок проходил за 10- секунд.
0 |
4607 / 2028 / 359 Регистрация: 17.03.2012 Сообщений: 10,086 Записей в блоге: 6 |
|
02.03.2017, 17:29 |
5 |
Dave_, OMG!!! Конечно будет тормозить! Картинку с этого контекста вам надо запихнуть в bitmap. И уже по нему пробегаться циклом. Добавлено через 1 минуту Добавлено через 4 минуты Но для этого надо содержимое картинки перевести в числовой массив в памяти, это надо разбираться, как.
0 |
-4 / 26 / 9 Регистрация: 06.03.2015 Сообщений: 209 |
|
02.03.2017, 17:36 [ТС] |
6 |
Спасибо за ответ. С ДС разобрался. Перенес взятие hdc = win32gui.GetWindowDC(win32gui.GetDesktopWindow()) в начало функции, остальное же беру и проверяю в массиве.
0 |
882 / 584 / 179 Регистрация: 28.02.2017 Сообщений: 2,359 Записей в блоге: 1 |
|
02.03.2017, 18:18 |
7 |
win32gui.GetPixel Никогда не используйте это. Оно в плане скорости работает через какую-то задницу даже в Win7. Добавлено через 2 минуты Не по теме: Я никогда не работал с Python, я как бы по Апи. Добавлено через 9 минут
hdc = win32gui.GetWindowDC(win32gui.GetDesktopWindow()) Кстати с этим не согласен. У вас какая ОС? Начиная с Win8 вроде какие-то ограничения добавили, ещё не смотрел эту ОСь. Добавлено через 1 минуту
0 |
dondublon 4607 / 2028 / 359 Регистрация: 17.03.2012 Сообщений: 10,086 Записей в блоге: 6 |
||||
02.03.2017, 18:30 |
8 |
|||
Касательно битмап, то понятия не имею как создать битмап и как работать с ним. Не мог бы ты объяснить? Я тоже понятия не имею, но первая же ссылка в гугле по «winapi DC to bitmap» выдала мне код:
Источник https://www.gamedev.net/topic/… -a-bitmap/
0 |
2740 / 2343 / 620 Регистрация: 19.03.2012 Сообщений: 8,832 |
|
02.03.2017, 18:30 |
9 |
А вообще зачем юзать API если можно просто сделать скрин с помощью pillow и потом искать с помощью numpy нужные данные в массиве.
1 |
Rodegast 3 / 3 / 4 Регистрация: 01.08.2015 Сообщений: 6 |
||||
03.03.2017, 15:05 |
10 |
|||
0 |
Dave_ -4 / 26 / 9 Регистрация: 06.03.2015 Сообщений: 209 |
||||
03.03.2017, 23:23 [ТС] |
11 |
|||
Rodegast, Не могу установить PySide из-за того, что у меня 9-я версия питона.
Проблема в том, что каждый раз размер массива возвращается разный. Код 3808462 3800826 3805894 3796368 Да и скорость опять хромает… Может делаю что не так?
0 |
Лысанов Виталий 9 / 9 / 3 Регистрация: 24.01.2015 Сообщений: 79 Записей в блоге: 6 |
||||
04.03.2017, 23:12 |
12 |
|||
Может помочь тема: Поиск фрагмента в изображении Ниже код, выполняющий захват экрана и поиск предварительно записанной части изображения.
«0.001» — точность сравнения
0 |
-4 / 26 / 9 Регистрация: 06.03.2015 Сообщений: 209 |
|
05.03.2017, 13:13 [ТС] |
13 |
Лысанов Виталий, нету ли какого-то заменителя для autopy? Дело в том, что у меня питон 3.5, а autopy на гораздо ранние версии. Добавлено через 4 минуты
0 |
882 / 584 / 179 Регистрация: 28.02.2017 Сообщений: 2,359 Записей в блоге: 1 |
|
05.03.2017, 16:03 |
14 |
Вам писали:
можно просто сделать скрин с помощью pillow и потом искать с помощью numpy нужные данные в массиве Вы пробовали сиё? Если есть встроенные средства лучше брать их, а не WinAPI.
0 |
Dave_ -4 / 26 / 9 Регистрация: 06.03.2015 Сообщений: 209 |
||||
05.03.2017, 17:26 [ТС] |
15 |
|||
GoodWeather, искал я по гуглу литературу и нашел только поиск через nonzero. Самому не нравится, но это в итоге не играет сути т.к цикл выполняется больше 10 секунд — гораздо больше 10 секунд. Вот еще одна версия пиллоу и нампи, на этот раз без такого поиска:
Выполняется это долго, так что… Проблема пожалуй не в винапи, а в цикле. Скрин экрана делается за доли секунды, а значит именно цикл тормозит скрипт.
0 |
882 / 584 / 179 Регистрация: 28.02.2017 Сообщений: 2,359 Записей в блоге: 1 |
|
05.03.2017, 19:00 |
16 |
гм… Виснуть тут может например этот вот «print», что он делает? Добавлено через 2 минуты
0 |
-4 / 26 / 9 Регистрация: 06.03.2015 Сообщений: 209 |
|
05.03.2017, 21:52 [ТС] |
17 |
GoodWeather, тут еще новая проблема нарисовалась… В коде, который я бросал в предведущем посте обнаружился баг Код Traceback (most recent call last): File "D:PythonScriptsSys.py", line 214, in <module> OnTimeCheck(); File "D:PythonScriptsSys.py", line 47, in OnTimeCheck if arr[x,y][0] == 129: IndexError: index 1024 is out of bounds for axis 0 with size 1024 И да, без принта заметно уменьшилось время. Добавлено через 24 минуты Код <PIL.Image.Image image mode=RGB size=1280x1024 at 0x2401F90> Т.е в 1024 и дальше есть, а точнее должны быть пиксели и соответствнно инфа о них в массиве
0 |
882 / 584 / 179 Регистрация: 28.02.2017 Сообщений: 2,359 Записей в блоге: 1 |
|
05.03.2017, 23:28 |
18 |
гм… Не знаю как в Питонах, а у нас в примитивных языках индексация начинается с нуля. То есть при ширине 1280 диапазон [0..1279]. Добавлено через 1 минуту
0 |
2740 / 2343 / 620 Регистрация: 19.03.2012 Сообщений: 8,832 |
|
05.03.2017, 23:30 |
19 |
Не знаю как в Питонах, Аналогично, так практически везде. Языки где нумерация с 1, это исключение.
0 |
Лысанов Виталий 9 / 9 / 3 Регистрация: 24.01.2015 Сообщений: 79 Записей в блоге: 6 |
||||
06.03.2017, 01:21 |
20 |
|||
Пример кода с матричным оператором сравнения:
Вывод программы: [[[ 2 1 19] [[ 3 2 20] [[ 3 1 19] Ответ, это координата 0,1. Только на этой координате в третьей колонке цифры 0,1,2 и только эти координаты встречаются в выводе три раза и матричные операторы работают намного быстрее циклов.
1 |
Иногда нам просто необходимо определить координаты положения курсора мышки в какой-то момент времени. Но как это сделать? Есть несколько способов.
Самым простым, на первый взгляд, очевидным способом является создание скриншота всего экрана и по получившемуся изображению в любой графической программе (Photoshop или Paint) посмотреть координаты нужного пикселя от левого верхнего угла картинки.
Так же, часто разработчику, дизайнеру, художнику или аниматору — людям, которые тесно связаны с графикой, требуется определение цвета пикселя под курсором мышки. И определить цвет пикселя на экране можно точно таким же способом, как и в случае с координатами, описанным выше.
Но что делать, когда требуется определить несколько координат и цветов? Или же эта процедура должна повторяться многократно, что вызывает очень сильный дискомфорт у человека: делать скриншот, загонять его в программу, брать инструмент, высчитывать координаты, другим инструментом определять цвет? Очень неудобно.
Программа для определения координат и цвета пикселя на экране.
В интернете можно попытаться найти подобный софт, который в своем отдалении может помочь решить поставленную задачу, узнать координаты курсора и цвет пикселя под ним. Но, попробуйте найти!
Всё, что попадалось на просторах интернета, похожее на грамотный софт — либо устаревший и нерабочий, либо напичкан вирусами, шпионами и прочими.
Итак, Вашему вниманию предлагается современная программа, которая поможет определить координаты, цвет пикселя и многое другое.
Функционал программы.
Навести курсор мышки на любое место экрана и нажать «Ctrl+1». Программа покажет:
1. Точные координаты курсора мышки.
2. Определит цвет пикселя под курсором в формате RGB.
Дополнительные возможности.
1. Возможность выбрать размер прямоугольника до 100 на 100 пикселей.
2. Программа отобразит выбранный участок в окне.
3. Программа рассчитает средний пиксель (сумму всех пикселей прямоугольника).
4. Программа отобразит значение среднего пикселя в RGB.
5. Программа визуально покажет цвет среднего пикселя в окне (смешать/объединить цветов всех пикселей).
Таким образом, в одной программе совмещаются сразу несколько функций: определение координат под курсором, цвет пикселя под курсором, вычисление среднего суммарного пикселя прямоугольника, и все это сопровождается визуальной картинкой в окне программы, для Вашего удобства!
Программа полностью функционирует, обновляется и поддерживается разработчиком. Так же, при желании, функционал может быть доработан и изменен под Вас.
Копия программы привязывается к конкретному пользователю и к конкретному ПК, обновления и поддержка включены в стоимость программы.
Узнать стоимость программы, оплатить и получить копию программы для определения координат и цвета пикселя на экране Вы можете написав на почту admin@tapbot.ru или по любому удобному каналу связи. Ссылки в подвале сайта.
Видео работы программы: