Findimage (Lua): различия между версиями
Tatikoma (обсуждение | вклад) (Новая страница: «== Описание == '''findimage''' - поиск изображения в области заданной начальными и конечными коор...») |
Cirus (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
== Описание == | == Описание == | ||
'''findimage''' - поиск изображения в области заданной начальными и конечными координатами по оси XY. | '''findimage''' - поиск изображения в области заданной начальными и конечными координатами по оси XY. | ||
− | + | <br> | |
− | + | <br>Формат картинки должен быть: '''bmp 24 бита.''' <br>Цвет крайнего пикселя в левом верхнем углу изображения считается "цветом фона", и при поиске картинки на экране не учитывается. Например, цвет этого пикселя красный (255). В этом случае все пиксели красного цвета присутствующие на искомой картинке будут считаться фоновыми (прозрачными) и не будут сравниваться с тем, что присутствует на экране. Поэтому, нельзя чтобы в файле-картинке все пиксели были одного цвета. Нужно сделать, чтобы хотя бы один левый верхний пиксель цветом отличался от остальных. | |
== Синтаксис == | == Синтаксис == | ||
Привязка к окну: опционально. | Привязка к окну: опционально. | ||
− | + | <br>Работа со свернутым окном: нет. | |
− | + | <br>Работа с перекрытым окном: Да. Привязка к окну обязательна. Aero (темы Windows, кроме Windows 10, в котором нет aero) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена. | |
− | ResultArray, a = findimage ( | + | ResultArray, a = findimage (<StartX>, <StartY>, <EndX>, <EndY>, <{filename}> [, type [, accuracy [, count [, deviation]]]] [, abs]) |
Где: | Где: | ||
− | + | <br>'''ResultArray''' - результирующий массив, в который записываются координаты изображения. Координатами изображения считается пиксель левого верхнего угла изображения. Если найдено несколько изображений, то координаты всех найденных изображений. Каждая строка массива хранится данные по отдельному найденному изображению: в первой колонке- координата X, во второй колонке- координата Y. | |
− | + | <br>'''<a>''' - переменная, в которую записывается результат работы команды findimage: | |
− | + | <br>Если a = 0, значит поиск был произведён, но картинка не найдена. | |
− | + | <br>Если найдена только 1 картинка, то будет записан процент точности найденного изображения. | |
− | + | <br>Если найдено несколько картинок, то будет записано количество найденных изображений. | |
− | + | <br>Однозначно определить сколько именно картинок было найдено командой FindImage лучше всего по размеру массива ResultArray с помощью функции #ResultArray. | |
− | + | <br>a < 0 означает, что FindImage не смог произвести поиск- либо была обнаружена ошибка в написании параметров команды, либо проблемы с самим файлом картинки. | |
− | + | <br>Если a = -4, значит файл картинки не найден / в неправильном формате / повреждён / все пиксели файла одного цвета. Чаще всего- путь к файлу указан неправильно. | |
− | + | <br>'''StartX, StartY''' - координаты левого верхнего угла области поиска. | |
− | + | <br>'''EndX, EndY''' - координаты правого нижнего угла области поиска. | |
− | + | <br>'''{filename}''' - путь к сохранённому изображению (только файл формата bmp 24 бита). Путь к изображению может быть указан как '''абсолютный''' - {C:\\programms\\pilot\\images\\}, так '''и относительный''' - {images\\}. Указывается в фигурных скобках. | |
− | + | <br>'''type''' - тип поиска. Может принимать значения: '''1''' (надежный), '''2''' (быстрый), '''workwindow'''(поиск в окне, в том числе перекрытом). Настоятельно рекомендуется использовать быстрый способ поиска, кроме случаев с некорректным обнаружением изображения. По умолчанию 2й тип поиска. Тип workwindow - в качестве аргумента указывать хендл окна. | |
− | + | <br>'''accuracy''' - точность поиска. Указывается в процентах. Используется для отсева изображений не достаточно схожих с оригиналом. По умолчанию значение равно 80%. | |
− | + | <br>'''count''' - ограничение количества найденных изображений. По умолчанию установлено для одного изображения - значение '''1''', для всех возможных - значение '''-1'''. | |
− | + | <br>'''deviation''' - погрешность оттенка. Пример: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением. | |
− | + | <br>'''abs''' - флаг использования абсолютных координат. Если он указан то поиск происходит относительно левого верхнего угла экрана. Без флага поиск происходит относительно левого верхнего угла рабочего окна(привязанного через ctrl+a либо иным способом). Указывается в кавычках "abs". | |
− | + | <br> | |
− | + | <br>Если вы ищете на экране текст в виде картинки, и в системе используется сглаживание шрифтов, то могут быть проблемы с нахождением, даже если вы видите, что такой текст на экране есть. Все-равно при включенном сглаживании искомая картинка может незначительно отличаться от того что есть на экране. В этом случае рекомендуется снизить точность поиска либо отключить сглаживание шрифтов на компьютере, где используется findimage. | |
− | '''Коды ошибок FindImage:''' | + | '''Коды ошибок FindImage:'''<br> |
− | ''''-1'''' упало при поиске, точная причина не известна. | + | ''''-1'''' упало при поиске, точная причина не известна.<br> |
− | ''''-2'''' не нашли открывающую скобку после имени функции. | + | ''''-2'''' не нашли открывающую скобку после имени функции.<br> |
− | ''''-3'''' не найдено пути в скобках. | + | ''''-3'''' не найдено пути в скобках.<br> |
− | ''''-4'''' ошибка поиска файла. | + | ''''-4'''' ошибка поиска файла.<br> |
− | ''''-5'''' ошибка обработки искомого изображения. | + | ''''-5'''' ошибка обработки искомого изображения.<br> |
− | ''''-6'''' ошибка получения изображения с экрана. | + | ''''-6'''' ошибка получения изображения с экрана.<br> |
''''-7'''' нечего искать, искомая картинка пустая. | ''''-7'''' нечего искать, искомая картинка пустая. | ||
− | + | <br><br>Иногда требуется сделать клик не по самому изображению, а со смещением. Указывать можно как вначале скрипта так и перед функцией findimage. | |
findoffsetx (50) -- смещение вправо на 50 пикселей | findoffsetx (50) -- смещение вправо на 50 пикселей | ||
findoffsety (30) -- смещение вниз на 30 пикселей | findoffsety (30) -- смещение вниз на 30 пикселей | ||
Строка 49: | Строка 49: | ||
--lua | --lua | ||
local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска | local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска | ||
− | local path = | + | local path = <nowiki>[["C:\картинка.bmp"]]</nowiki> -- путь к картинке, bmp 24 бита |
local arr, a = findimage (startX, startY, endX, endY, {path}, 2) -- поиск картинки | local arr, a = findimage (startX, startY, endX, endY, {path}, 2) -- поиск картинки | ||
hint (a) -- результат поиска, подсказка в правом нижнем углу | hint (a) -- результат поиска, подсказка в правом нижнем углу | ||
Строка 62: | Строка 62: | ||
-- поиск нескольких одинаковых изображений | -- поиск нескольких одинаковых изображений | ||
-- если будет найдено больше 20 поиск прекратится, точность 70%, отклонение в цвете 5% | -- если будет найдено больше 20 поиск прекратится, точность 70%, отклонение в цвете 5% | ||
− | local arr = findimage (0, 0, 1920, 1080, {"картинка.bmp"}, 2, 70, 20, 5) -- поиск картинки, должна быть в папке с пилотом | + | local arr, a = findimage (0, 0, 1920, 1080, {"картинка.bmp"}, 2, 70, 20, 5) -- поиск картинки, должна быть в папке с пилотом |
hint (a) -- результат поиска, подсказка в правом нижнем углу | hint (a) -- результат поиска, подсказка в правом нижнем углу | ||
if arr then -- если найдена | if arr then -- если найдена | ||
Строка 74: | Строка 74: | ||
--lua | --lua | ||
local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска | local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска | ||
− | local path = | + | local path = <nowiki>[[C:\pilot]]</nowiki> -- путь к картинкам |
local image = {"картинка", "картинка2", "картинка3"} -- массив с именами картинок, имена могут быть любыми | local image = {"картинка", "картинка2", "картинка3"} -- массив с именами картинок, имена могут быть любыми | ||
Строка 86: | Строка 86: | ||
end | end | ||
'''Пример поиска картинки в перекрытом(не свёрнутом) окне:''' | '''Пример поиска картинки в перекрытом(не свёрнутом) окне:''' | ||
− | + | <br>Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена. | |
− | + | <br>Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана. | |
− | + | <br>Как правило, требуется указывать родительское окно. В окне пилота есть кнопка 'F', при нажатии открывается окно, в котором отображается что "видит" пилот при поиске (Findcolor, Findimage). | |
--lua | --lua | ||
− | local handle = findwindow (" | + | local handle = findwindow ("Lineage2") -- поиск окна, вместо 'Lineage2' написать нужное имя окна |
local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска | local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска | ||
− | local path = | + | local path = <nowiki>[["C:\картинка.bmp"]]</nowiki> -- путь к картинке |
if handle then | if handle then | ||
local arr, a = findimage (startX, startY, endX, endY, {path}, handle[1][1]) -- поиск картинки | local arr, a = findimage (startX, startY, endX, endY, {path}, handle[1][1]) -- поиск картинки | ||
Строка 110: | Строка 110: | ||
[[Findcolor (Lua)]] | [[Findcolor (Lua)]] | ||
− | + | <br>[[Color (Lua)]] |
Текущая версия на 22:01, 4 октября 2020
Содержание
Описание
findimage - поиск изображения в области заданной начальными и конечными координатами по оси XY.
Формат картинки должен быть: bmp 24 бита.
Цвет крайнего пикселя в левом верхнем углу изображения считается "цветом фона", и при поиске картинки на экране не учитывается. Например, цвет этого пикселя красный (255). В этом случае все пиксели красного цвета присутствующие на искомой картинке будут считаться фоновыми (прозрачными) и не будут сравниваться с тем, что присутствует на экране. Поэтому, нельзя чтобы в файле-картинке все пиксели были одного цвета. Нужно сделать, чтобы хотя бы один левый верхний пиксель цветом отличался от остальных.
Синтаксис
Привязка к окну: опционально.
Работа со свернутым окном: нет.
Работа с перекрытым окном: Да. Привязка к окну обязательна. Aero (темы Windows, кроме Windows 10, в котором нет aero) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.
ResultArray, a = findimage (<StartX>, <StartY>, <EndX>, <EndY>, <{filename}> [, type [, accuracy [, count [, deviation]]]] [, abs])
Где:
ResultArray - результирующий массив, в который записываются координаты изображения. Координатами изображения считается пиксель левого верхнего угла изображения. Если найдено несколько изображений, то координаты всех найденных изображений. Каждая строка массива хранится данные по отдельному найденному изображению: в первой колонке- координата X, во второй колонке- координата Y.
<a> - переменная, в которую записывается результат работы команды findimage:
Если a = 0, значит поиск был произведён, но картинка не найдена.
Если найдена только 1 картинка, то будет записан процент точности найденного изображения.
Если найдено несколько картинок, то будет записано количество найденных изображений.
Однозначно определить сколько именно картинок было найдено командой FindImage лучше всего по размеру массива ResultArray с помощью функции #ResultArray.
a < 0 означает, что FindImage не смог произвести поиск- либо была обнаружена ошибка в написании параметров команды, либо проблемы с самим файлом картинки.
Если a = -4, значит файл картинки не найден / в неправильном формате / повреждён / все пиксели файла одного цвета. Чаще всего- путь к файлу указан неправильно.
StartX, StartY - координаты левого верхнего угла области поиска.
EndX, EndY - координаты правого нижнего угла области поиска.
{filename} - путь к сохранённому изображению (только файл формата bmp 24 бита). Путь к изображению может быть указан как абсолютный - {C:\\programms\\pilot\\images\\}, так и относительный - {images\\}. Указывается в фигурных скобках.
type - тип поиска. Может принимать значения: 1 (надежный), 2 (быстрый), workwindow(поиск в окне, в том числе перекрытом). Настоятельно рекомендуется использовать быстрый способ поиска, кроме случаев с некорректным обнаружением изображения. По умолчанию 2й тип поиска. Тип workwindow - в качестве аргумента указывать хендл окна.
accuracy - точность поиска. Указывается в процентах. Используется для отсева изображений не достаточно схожих с оригиналом. По умолчанию значение равно 80%.
count - ограничение количества найденных изображений. По умолчанию установлено для одного изображения - значение 1, для всех возможных - значение -1.
deviation - погрешность оттенка. Пример: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.
abs - флаг использования абсолютных координат. Если он указан то поиск происходит относительно левого верхнего угла экрана. Без флага поиск происходит относительно левого верхнего угла рабочего окна(привязанного через ctrl+a либо иным способом). Указывается в кавычках "abs".
Если вы ищете на экране текст в виде картинки, и в системе используется сглаживание шрифтов, то могут быть проблемы с нахождением, даже если вы видите, что такой текст на экране есть. Все-равно при включенном сглаживании искомая картинка может незначительно отличаться от того что есть на экране. В этом случае рекомендуется снизить точность поиска либо отключить сглаживание шрифтов на компьютере, где используется findimage.
Коды ошибок FindImage:
'-1' упало при поиске, точная причина не известна.
'-2' не нашли открывающую скобку после имени функции.
'-3' не найдено пути в скобках.
'-4' ошибка поиска файла.
'-5' ошибка обработки искомого изображения.
'-6' ошибка получения изображения с экрана.
'-7' нечего искать, искомая картинка пустая.
Иногда требуется сделать клик не по самому изображению, а со смещением. Указывать можно как вначале скрипта так и перед функцией findimage.
findoffsetx (50) -- смещение вправо на 50 пикселей findoffsety (30) -- смещение вниз на 30 пикселей findoffsetx (-40) -- смещение влево на 40 пикселей findoffsety (-60) -- смещение вверх на 60 пикселей
Примеры
--lua local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска local path = [["C:\картинка.bmp"]] -- путь к картинке, bmp 24 бита local arr, a = findimage (startX, startY, endX, endY, {path}, 2) -- поиск картинки hint (a) -- результат поиска, подсказка в правом нижнем углу if arr then -- если найдена log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2]) kleft (arr[1][1], arr[1][2]) -- кликнули end -- в результате работы, если в заданной области картинка обнаружена, в массив %arr[1][1] будет записано значение координаты X -- а в %arr[1][2] - значение координаты Y
--lua -- поиск нескольких одинаковых изображений -- если будет найдено больше 20 поиск прекратится, точность 70%, отклонение в цвете 5% local arr, a = findimage (0, 0, 1920, 1080, {"картинка.bmp"}, 2, 70, 20, 5) -- поиск картинки, должна быть в папке с пилотом hint (a) -- результат поиска, подсказка в правом нижнем углу if arr then -- если найдена log ("Найдено картинок: " .. #arr) for i=1, #arr do kleft (arr[i][1], arr[i][2]) -- кликнули на каждой wait (1000) -- пауза 1000 мсек (1 сек) end end
--lua local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска local path = [[C:\pilot]] -- путь к картинкам local image = {"картинка", "картинка2", "картинка3"} -- массив с именами картинок, имена могут быть любыми hint ("Всего картинок для поиска " .. #image) for i=1, #image do -- цикл для поиска картинок local arr, a = findimage (startX, startY, endX, endY, {path .. "\\" .. image[i] .. ".bmp"}, 2) -- поиск картинки if arr then move (arr[1][1], arr[1][2]) -- переместить курсор на найденную картинку wait (500) -- ждать 0,5 секунды end end
Пример поиска картинки в перекрытом(не свёрнутом) окне:
Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.
Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана.
Как правило, требуется указывать родительское окно. В окне пилота есть кнопка 'F', при нажатии открывается окно, в котором отображается что "видит" пилот при поиске (Findcolor, Findimage).
--lua local handle = findwindow ("Lineage2") -- поиск окна, вместо 'Lineage2' написать нужное имя окна local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска local path = [["C:\картинка.bmp"]] -- путь к картинке if handle then local arr, a = findimage (startX, startY, endX, endY, {path}, handle[1][1]) -- поиск картинки hint (a) -- результат поиска, подсказка в правом нижнем углу if arr then -- если найдена log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2]) left (arr[1][1], arr[1][2], handle[1][1]) -- кликнули, left работает не во всех приложениях -- move (arr[1][1], arr[1][2], handle[1][1]) -- навести курсор на картинку (раскомментировать строку чтобы сработало) else log ("Изображение не найдено") end else log("Окно не найдено") end