Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Нужен совет по поиску изображения
nykep
сообщение 23.4.2019, 1:43
Сообщение #1


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1161
Пользователь №: 15.246
Возраст: 25



там где написано Tier: 1 Tier: 2
мне нужно чтоб он мог найти цифры 1 и 2 , но шрифт очень неприглядный
есть вероятность что цифры имеют прозрачность или слегка меняют оттенок в зависимости от положения этого окошка на экране
возможно ли это при худшем раскладе или хотя бы если цифры всегда имеют одинаковые цвета во всех точках? Да и конечно чтоб он не путал их другими буквами и цифрами
(IMG:https://i.ibb.co/Tb5Gv49/screenshot-0001.png)
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 24.4.2019, 0:32
Сообщение #2


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Цитата(nykep @ 23.4.2019, 1:43) *

там где написано Tier: 1 Tier: 2
мне нужно чтоб он мог найти цифры 1 и 2 , но шрифт очень неприглядный
есть вероятность что цифры имеют прозрачность или слегка меняют оттенок в зависимости от положения этого окошка на экране
возможно ли это при худшем раскладе или хотя бы если цифры всегда имеют одинаковые цвета во всех точках? Да и конечно чтоб он не путал их другими буквами и цифрами
(IMG:https://i.ibb.co/Tb5Gv49/screenshot-0001.png)
Почитайте тут:
https://forum.uokit.com/index.php?showtopic...%E8%ED%EA%E0%F5
Можно поискать этим скриптом
Код

// Поиск статичных точек на нескольких картинках
//Закидываете в папку несколько картинок одной цифры, например 1, 1a, 1b. Скрипт сравнит картинки. Пиксели, которые //присутствуют на всех картинках будут оставлены, остальные закрашены. Подберите погрешность по цвету, чтобы не //слишком много было закрашено. Попробуйте искать полученную картинку.
//Важно:
//1. Картинки 1, 1a, 1b должны быть одного размера.
//2. В скрипте поиска числа

set %path [1] "D:\image\Fin"     // путь для сохранения готовой картинки
set $path "D:\\image"                // путь к анализируемым картинкам
init_arr %rgb (1) 255 0 0           // цвет для закрашивания фона в формате RGB
set #deviat 0                            // погрешность в цвете

// остальное не менять
dir(%picture $path *.bmp*)
for #i 1 size(%picture)
    set %a [#i] Loadimage (%picture [#i 1])
end_for

set linedelay 0
set $imya prompt (Введите имя картинки)
set %imya [1] $imya

set workwindow windowhandle
set #r %rgb [1 1]
set #g %rgb [1 2]
set #b %rgb [1 3]
writemem #b %a [1 1] b
writemem #g eval(%a [1 1] + 1) b
writemem #r eval(%a [1 1] + 2) b


set #delta %a [1 4] - (%a [1 4] - %a [1 2] * 3 + 1)
for #j 0 eval(%a [1 3] - 1)
    for #i 0 #delta 3
        for #k 2 size(%a)
            set #z %a [1 1] + %a [1 4] * #j + #i
            set #z1 %a [1 1] + %a [1 4] * #j + #i + 1
            set #z2 %a [1 1] + %a [1 4] * #j + #i + 2
            readmem #b1 #z b
            readmem #g1 #z1 b
            readmem #r1 #z2 b

            set #z3 %a [#k 1] + %a [#k 4] * #j + #i
            set #z4 %a [#k 1] + %a [#k 4] * #j + #i + 1
            set #z5 %a [#k 1] + %a [#k 4] * #j + #i + 2
            readmem #b #z3 b
            readmem #g #z4 b
            readmem #r #z5 b
            gosub rgb

            if  #rmin > #r1 or #rmax < #r1 or #gmin > #g1 or #gmax < #g1 or #bmin > #b1 or #bmax < #b1
                set #rpaint %rgb [1 1]
                set #gpaint %rgb [1 2]
                set #bpaint %rgb [1 3]
                writemem #bpaint #z b
                writemem #gpaint #z1 b
                writemem #rpaint #z2 b
                break
            end_if
        end_for
    end_for
end_for

hint (20 clRed 500 500 (Картинка сохранена))
wait 1000
hint (10 clblack 1920 1 (1))
set $bmp SaveImage (%a [1 1] %path [1]\%imya [1].bmp)
end_script

:rgb
    set #rmin #r - 255 * #deviat / 100
    set #rmax #r + 255 * #deviat / 100
    set #gmin #g - 255 * #deviat / 100
    set #gmax #g + 255 * #deviat / 100
    set #bmin #b - 255 * #deviat / 100
    set #bmax #b + 255 * #deviat / 100

    set #dev 255 * #deviat / 100
    set #bmin #b - #dev
    set #bmax #b + #dev
    if  #bmax > 255
        set #bmax 255
    end_if
    if  #bmin < 0
        set #bmin 0
    end_if
    set #gmin #g - #dev
    set #gmax #g + #dev
    if  #gmax > 255
        set #gmax 255
    end_if
    if  #gmin < 0
        set  #gmin 0
    end_if
    set #rmin #r - #dev
    set #rmax #r + #dev
    if  #rmax > 255
        set #rmax 255
    end_if
    if  #rmin < 0
        set #rmin 0
    end_if
return
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 22.6.2019, 21:31
Сообщение #3


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1161
Пользователь №: 15.246
Возраст: 25



ранее использовал этот скрипт и он хорошо работал, прошло 2 месяца и он мне снова понадобился, но почему то он ничего не находит. Ради эксперимента попробовал использовать картинки по которым ранее уже создавал готовую картинку, но в этот раз он ничего не нашел, потом просто в пэинте нарисовал квадрат и сохранил под разными именами - результат тот же. Пилот не менял, скрипт заново скопировал отсюда. Погрешность никакая не помогает.В чем может быть проблема?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 22.6.2019, 22:33
Сообщение #4


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1161
Пользователь №: 15.246
Возраст: 25



я разобрался - нельзя чтоб в папке с анализируемыми изображениями кроме этих изображений были папки с другими изображениями, он проверяет все что вложено в папку для анализа
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 22.6.2019, 23:03
Сообщение #5


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
проверяет все что вложено в папку

Код
dir(%picture $path "*.bmp" norecursion)

Не будет проверять вложенные папки.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 22.6.2019, 23:05
Сообщение #6


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1161
Пользователь №: 15.246
Возраст: 25



спасибо
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 23.6.2019, 0:37
Сообщение #7


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1161
Пользователь №: 15.246
Возраст: 25



еще вопрос - я раньше все делал на пилотовском языке, теперь начал на луа и мне не дает покоя одна вещь, а именно отсутствие goto. У меня задача найти на экране цвет или картинку, которые постоянно перемещаются при выполнении действий связанных с появлением этого объекта на экране, раньше я просто писал например
Код

:box
set #a findcolor
if #a > 0
move
kleft
end_if
goto box

и он делал все что надо пока наконец не взаимодействовал с объектом
теперь же, я пытаюсь делать по другому, но иногда такое решение меня не устраивает
Код

local loot = findcolor ([[85, 75, 1909, 1062, 1, 1 (10025624) %ex 2 1]])
            if  loot > 0 then
                repeat
                    local loot = findcolor ([[85, 75, 1909, 1062, 1, 1 (10025624) %ex 2 1]])
                        if  loot > 0 then
                            move(ex[1][1], ex[1][2])
                            wait (50)
                            kleft(ex[1][1], ex[1][2])
                            wait (200)
                        end
                until loot == 0
            end

Или использую while, вообщем приходится по условию входить в цикл а внутри цикла писать еще один поиск. Я придумал только так, существует ли какой то другой вариант для таких дел?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 23.6.2019, 0:49
Сообщение #8


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
:box
set #a findcolor
if #a > 0
move
kleft
end_if
goto box

Зачем тут goto?
Код
while 1 = 1
set #a findcolor
if #a > 0
move
kleft
end_if
end_while

Тоже самое.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 23.6.2019, 1:04
Сообщение #9


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1161
Пользователь №: 15.246
Возраст: 25



все понятно, значит надо просто вписать break если условие не выполняется
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 23.6.2019, 2:02
Сообщение #10


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
надо просто вписать break если условие не выполняется

И break не нужен.
Код
set #a 0
while #a = 0
    set #a findcolor
    if #a > 0
        move
        kleft
    end_if
    wait 1
end_while
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 23.6.2019, 2:23
Сообщение #11


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1161
Пользователь №: 15.246
Возраст: 25



Цитата(cirus @ 23.6.2019, 2:02) *

И break не нужен.
Код
set #a 0
while #a = 0
    set #a findcolor
    if #a > 0
        move
        kleft
    end_if
    wait 1
end_while


нет, так он зациклен до тех пор пока не увидит объект, а затем выходит, а надо наоборот чтоб был зациклен пока видит и выходит как только пропал.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 23.6.2019, 2:27
Сообщение #12


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
а надо наоборот чтоб был зациклен пока видит и выходит как только пропал.

Код
set #a 1
while #a > 0
    set #a findcolor
    if #a > 0
        move
        kleft
    end_if
    wait 1
end_while
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 23.6.2019, 15:16
Сообщение #13


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



По идее можно даже и еще короче =)

Код
set #a 1
while #a > 0
    set #a findcolor
    move
    kleft
end_while


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 23.6.2019, 15:25
Сообщение #14


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
можно даже и еще короче

Если картинка не найдётся получим ошибку на move, т. к. массив с координатами будет пуст.
Тогда уже так:
Код
set #a findcolor
while #a > 0
    move
    kleft
    set #a findcolor
    wait 1
end_while
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 23.6.2019, 15:31
Сообщение #15


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(cirus @ 23.6.2019, 15:25) *

Тогда уже так:

Не подумал о возможной необходимости клик в координаты цвета из поиска.
Спасибо, что поправил )


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 23.6.2019, 22:31
Сообщение #16


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1161
Пользователь №: 15.246
Возраст: 25



я в начале написал не то что имел в виду поэтому меня не совсем так поняли, там где goto он должен быть внутри if
Код
:box
set #a findcolor
if #a > 0
move
kleft
goto box
end_if

вообщем я все понял спасибо за ответы
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 16:07
Designed by Nickostyle