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

11 страниц V < 1 2 3 4 > »   
Ответить в эту темуОткрыть новую тему
> Поиск числа с помощью Findimage, Готовый скрипт
dron4938
сообщение 7.4.2017, 0:32
Сообщение #21


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



#accuracy -1 #deviation вместо -1, надо 1

не, это не работает, он все равно лопатит всю строку, находит 3 картинки и пишет 3 раза число (IMG:style_emoticons/default/stars.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 7.4.2017, 1:25
Сообщение #22


**********

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



Цитата
set #a Findimage(0 0 %get [1 2] %get [1 3] (%image[#i 1]) %a #v #accuracy -1 #deviation)
#accuracy -1 #deviation вместо -1, надо 1
кстати, а зачем -1, так же поиск будет дольше

А если надо найти число, например, 33? Будет найдена первая 3 и поиск остановится.
Цитата
Собственно вопрос: как прописать, чтобы если поиск нашел 2 совпадения, то в итоге 1 число подставлял?

Если время будет допишу в выходные.
Пока попробуйте скриптом сделать картинку.
код
Код
// Поиск статичных точек на нескольких картинках

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

// остальное не менять
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

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

3. Попробуйте уменьшить точность поиска.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 7.4.2017, 2:26
Сообщение #23


**********

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



Цитата
Собственно вопрос: как прописать, чтобы если поиск нашел 2 совпадения, то в итоге 1 число подставлял?

Попробуй этот:
код
Код
// Поиск числа с помощью FindImage
init_arr %GetImage (1) 0 0 99, 58     // координаты для поиска, StartX StartY EndX EndY

set linedelay 0
init_arr %picture 0 1 2 3 4 5 6 7 8 9     // имена картинок (0.bmp, 1.bmp и т. д.)
init_arr %symbol 0 1 2 3 4 5 6 7 8 9    // символ соответствующий имени, т. е. картинка 0.bmp соответствует 0
set $path "C:\Number2"                     // папка с картинками
set $bmp "*.bmp*"                           // формат картинок
set #deltaY 8                               // расстояние между строками (можно указать высоту картинок)
set #deltaspace 12                          // допустимое расстояние между цифрами, иначе будет считаться что это не одно число
set #accuracy 90                            // точность поиска для Findimage
set #deviation 3                            // погрешность оттенка  для Findimage
set #wait 2                                 // пауза между поиском картинок, если указать меньше искать будет быстрее, но нагрузит процессор
set #timeproc 2000                          // время (в мсек) для поиска картинок, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 картинка
set #repeatimage 2                          // допустимое смещение координат, если используется несколько видов одной картинки

dir (%path $path $bmp)
set delimiter '   '
while 1 = 1
    set size(%result)                        // уничтожить массив с предыдущими результатами
    call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage    // процедура поиска
    // save_array %result C:\resultarr.txt     // массив с результатами поиска

    if  size(%result) > 0         // если размер массива больше 0
        // ТУТ НУЖНЫЕ ДЕЙСТВИЯ
        ///////////// для примера вывод в hint того что нашлось (можно убрать)
        set $str
        set %z [1] \n
        for #i 1 size(%result)
            set $str $str%result[#i]
            if  #i != size(%result)
                set $str $str%z [1]
            end_if
        end_for
        hint (14 clBlue 409, 265 ($str))
        /////////////
    else
        hint Картинки не найдены
    end_if
end_while

// процедура поиска и сортировки
proc test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage
    set #GetStartX %GetImage [1 1]
    set #GetStartY %GetImage [1 2]
    set #GetEndX %GetImage [1 3]
    set #GetEndY %GetImage [1 4]
    set #current_script current_script
    // загрузка картинок в память
    if  size(%path) > 0                  // если картинки найдены
        for #i 1 size(%path)
            for #j 1 size(%picture)
                if  %path [#i 3] = %picture [#j]
                    set #n #n + 1
                    set %image [#n] LoadImage(%path [#i 1])
                    set %number [#n] %symbol [#j]
                    break
                end_if
            end_for
        end_for
    else
        log Картинки в: $path   не найдены
        log Скрипт остановлен
        stop_script #current_script
    end_if
    // поиск картинок и их сортировка
    set size(%result1)
    while size(%result1) = 0 and (#timeproc > timer or #timeproc = 0)
        set #z 0
        set %get GetImage(#GetStartX #GetStartY #GetEndX #GetEndY)      // сохранить часть экрана в память
        set #v %get [1 1]
        for #i 1 size(%number)
            set #a Findimage(0 0 %get [1 2] %get [1 3] (%image[#i 1]) %a #v #accuracy -1 #deviation)   // поиск
            if  #a < 0
                log Ошибка поиска картинки. Код ошибки: #a
                log Скрипт остановлен
                stop_script #current_script
            end_if
            if  #a > 0
                for #j 1 size(%a)
                    set #z #z + 1
                    init_arr %result1 (1 1 #z) %number[#i] %a[#j 1] %a[#j 2]   // запись результатов поиска в массив
                end_for
            end_if
            wait #wait
        end_for
        if  size(%result1) > 0
            gosub sortY        // сортировка по Y и X
        end_if
        set $b DeleteImage(%get[1 1])    // удалить изображение, полученное GetImage
    end_while
    goto end                 // выйти из процедуры

    :sortY
    ///// удаление повторных координат, если используется несколько видов одной картинки
        set #size 0
        set %tmp %result1
        set size(%result1)
        for #i 1 size(%tmp[1])
            set #break 0
            for #n 1 #size
                set #xrepeat %tmp[2 #i] - %result1[2 #n]
                set #yrepeat %tmp[3 #i] - %result1[3 #n]
                if  abs(#xrepeat) <= #repeatimage and abs(#yrepeat) <= #repeatimage
                    set #break 1
                    break
                end_if
            end_for
            if  #break = 0
                set #size #size + 1
                init_arr %result1 (1 1 #size) %tmp [1 #i]  %tmp [2 #i] %tmp [3 #i]
            end_if
        end_for
     ///////

        set #z 0
        set #z1 0
        set #z2 1
        set #z4 0
        sort_array %result1 -3
        while 1 = 1
            set #z 0
            set size(%tmp)
            for #i #z2 eval(size(%result1 [1]) - 1)
                set #j #i + 1
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) < #deltaY
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                else
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                    break
                end_if
            end_for
            set #z2 #z2 + #z
            if  #z2 = size(%result1[])
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) > #deltaY
                    set #jj #j
                    sort_array %tmp -2
                    set #z1 #z1 + 1
                    init_arr %result (#z1) %tmp [1]
                    gosub space
                    set size(%tmp)
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #jj]  %result1 [2 #jj] %result1 [3 #jj]
                    set #z1 #z1 + 1
                    set %result.#current_script [#z1] %tmp [1]
                    gosub end
                end_if
                set #z #z + 1
                init_arr %tmp (1 1 #z) %result1 [1 #j]  %result1 [2 #j] %result1 [3 #j]
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                gosub space
                break
            else
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                gosub space
            end_if
        end_while
    return

    :space
        set #z3 0
        set size(%space)
        set #z4 #z4 + 1
        //посчитать где нужны пробелы
        for #i 1 eval(size(%tmp[]) - 1)
            set #j #i + 1
            set #space  %tmp [2 #i] - %tmp [2 #j]
            if  abs(#space) > #deltaspace
                set #z3 #z3 + 1
                set %space[#z3] #j
            end_if
        end_for
        // вставить пробелы
        for #i 1 size(%space)
            set $str %result [#z4]
            set $str insert(" " $str %space[#i])
            set #j #i + 1
            set %space[#j] %space[#j] + #i
            set %result [#z4] $str
        end_for
        // сохранение массива в основном скрипте
        for #i 1 size(%result)
            set size(%tmp1)
            init_arr %tmp1 (1) %result [#i]
            for #j 1 size(%tmp1[1])
                set %result.#current_script [#i #j] %tmp1 [1 #j]
            end_for
        end_for
    return

    :end
end_proc

Добавлен поиск и удаление лишних координат, если для поиска цифры используется несколько видов этой цифры. Особо не тестил.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 7.4.2017, 16:20
Сообщение #24


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Цитата(cirus @ 7.4.2017, 2:26) *

Попробуй этот:
код
Код
// Поиск числа с помощью FindImage
init_arr %GetImage (1) 0 0 99, 58     // координаты для поиска, StartX StartY EndX EndY

set linedelay 0
init_arr %picture 0 1 2 3 4 5 6 7 8 9     // имена картинок (0.bmp, 1.bmp и т. д.)
init_arr %symbol 0 1 2 3 4 5 6 7 8 9    // символ соответствующий имени, т. е. картинка 0.bmp соответствует 0
set $path "C:\Number2"                     // папка с картинками
set $bmp "*.bmp*"                           // формат картинок
set #deltaY 8                               // расстояние между строками (можно указать высоту картинок)
set #deltaspace 12                          // допустимое расстояние между цифрами, иначе будет считаться что это не одно число
set #accuracy 90                            // точность поиска для Findimage
set #deviation 3                            // погрешность оттенка  для Findimage
set #wait 2                                 // пауза между поиском картинок, если указать меньше искать будет быстрее, но нагрузит процессор
set #timeproc 2000                          // время (в мсек) для поиска картинок, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 картинка
set #repeatimage 2                          // допустимое смещение координат, если используется несколько видов одной картинки

dir (%path $path $bmp)
set delimiter '   '
while 1 = 1
    set size(%result)                        // уничтожить массив с предыдущими результатами
    call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage    // процедура поиска
    // save_array %result C:\resultarr.txt     // массив с результатами поиска

    if  size(%result) > 0         // если размер массива больше 0
        // ТУТ НУЖНЫЕ ДЕЙСТВИЯ
        ///////////// для примера вывод в hint того что нашлось (можно убрать)
        set $str
        set %z [1] \n
        for #i 1 size(%result)
            set $str $str%result[#i]
            if  #i != size(%result)
                set $str $str%z [1]
            end_if
        end_for
        hint (14 clBlue 409, 265 ($str))
        /////////////
    else
        hint Картинки не найдены
    end_if
end_while

// процедура поиска и сортировки
proc test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage
    set #GetStartX %GetImage [1 1]
    set #GetStartY %GetImage [1 2]
    set #GetEndX %GetImage [1 3]
    set #GetEndY %GetImage [1 4]
    set #current_script current_script
    // загрузка картинок в память
    if  size(%path) > 0                  // если картинки найдены
        for #i 1 size(%path)
            for #j 1 size(%picture)
                if  %path [#i 3] = %picture [#j]
                    set #n #n + 1
                    set %image [#n] LoadImage(%path [#i 1])
                    set %number [#n] %symbol [#j]
                    break
                end_if
            end_for
        end_for
    else
        log Картинки в: $path   не найдены
        log Скрипт остановлен
        stop_script #current_script
    end_if
    // поиск картинок и их сортировка
    set size(%result1)
    while size(%result1) = 0 and (#timeproc > timer or #timeproc = 0)
        set #z 0
        set %get GetImage(#GetStartX #GetStartY #GetEndX #GetEndY)      // сохранить часть экрана в память
        set #v %get [1 1]
        for #i 1 size(%number)
            set #a Findimage(0 0 %get [1 2] %get [1 3] (%image[#i 1]) %a #v #accuracy -1 #deviation)   // поиск
            if  #a < 0
                log Ошибка поиска картинки. Код ошибки: #a
                log Скрипт остановлен
                stop_script #current_script
            end_if
            if  #a > 0
                for #j 1 size(%a)
                    set #z #z + 1
                    init_arr %result1 (1 1 #z) %number[#i] %a[#j 1] %a[#j 2]   // запись результатов поиска в массив
                end_for
            end_if
            wait #wait
        end_for
        if  size(%result1) > 0
            gosub sortY        // сортировка по Y и X
        end_if
        set $b DeleteImage(%get[1 1])    // удалить изображение, полученное GetImage
    end_while
    goto end                 // выйти из процедуры

    :sortY
    ///// удаление повторных координат, если используется несколько видов одной картинки
        set #size 0
        set %tmp %result1
        set size(%result1)
        for #i 1 size(%tmp[1])
            set #break 0
            for #n 1 #size
                set #xrepeat %tmp[2 #i] - %result1[2 #n]
                set #yrepeat %tmp[3 #i] - %result1[3 #n]
                if  abs(#xrepeat) <= #repeatimage and abs(#yrepeat) <= #repeatimage
                    set #break 1
                    break
                end_if
            end_for
            if  #break = 0
                set #size #size + 1
                init_arr %result1 (1 1 #size) %tmp [1 #i]  %tmp [2 #i] %tmp [3 #i]
            end_if
        end_for
     ///////

        set #z 0
        set #z1 0
        set #z2 1
        set #z4 0
        sort_array %result1 -3
        while 1 = 1
            set #z 0
            set size(%tmp)
            for #i #z2 eval(size(%result1 [1]) - 1)
                set #j #i + 1
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) < #deltaY
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                else
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                    break
                end_if
            end_for
            set #z2 #z2 + #z
            if  #z2 = size(%result1[])
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) > #deltaY
                    set #jj #j
                    sort_array %tmp -2
                    set #z1 #z1 + 1
                    init_arr %result (#z1) %tmp [1]
                    gosub space
                    set size(%tmp)
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #jj]  %result1 [2 #jj] %result1 [3 #jj]
                    set #z1 #z1 + 1
                    set %result.#current_script [#z1] %tmp [1]
                    gosub end
                end_if
                set #z #z + 1
                init_arr %tmp (1 1 #z) %result1 [1 #j]  %result1 [2 #j] %result1 [3 #j]
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                gosub space
                break
            else
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                gosub space
            end_if
        end_while
    return

    :space
        set #z3 0
        set size(%space)
        set #z4 #z4 + 1
        //посчитать где нужны пробелы
        for #i 1 eval(size(%tmp[]) - 1)
            set #j #i + 1
            set #space  %tmp [2 #i] - %tmp [2 #j]
            if  abs(#space) > #deltaspace
                set #z3 #z3 + 1
                set %space[#z3] #j
            end_if
        end_for
        // вставить пробелы
        for #i 1 size(%space)
            set $str %result [#z4]
            set $str insert(" " $str %space[#i])
            set #j #i + 1
            set %space[#j] %space[#j] + #i
            set %result [#z4] $str
        end_for
        // сохранение массива в основном скрипте
        for #i 1 size(%result)
            set size(%tmp1)
            init_arr %tmp1 (1) %result [#i]
            for #j 1 size(%tmp1[1])
                set %result.#current_script [#i #j] %tmp1 [1 #j]
            end_for
        end_for
    return

    :end
end_proc

Добавлен поиск и удаление лишних координат, если для поиска цифры используется несколько видов этой цифры. Особо не тестил.


Да, то что нужно, вроде работает отлично, буду дальше тестить. С меня пивасик (IMG:style_emoticons/default/rolleyes.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 7.4.2017, 21:00
Сообщение #25


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



скрипт

Код

// Поиск числа с помощью FindImage
init_arr %GetImage (1) 939, 512 1115, 524     // координаты для поиска, StartX StartY EndX EndY

set linedelay 0
init_arr %picture 0a 0b 0c 1a 1b 2a 2b 2c 2d 2e 3a 3b 4a 4b 4c 5a 5b 5c 6a 6b 7a 7b 7c 8a 8b 8c 9a 9b 9c 9d 9e  // имена картинок (0.bmp, 1.bmp и т. д.)
init_arr %symbol  0 0 0 1 1 2 2 2 2 2 3 3 4 4 4 5 5 5 6 6 7 7 7 8 8 8 9 9 9 9 9 // символ соответствующий имени, т. е. картинка 0.bmp соответствует 0
set $path "C:\Users\Andrey\Desktop\Pil\ica\a"                     // папка с картинками
set $bmp "*.bmp*"                           // формат картинок
set #deltaY 8                               // расстояние между строками (можно указать высоту картинок)
set #deltaspace 12                          // допустимое расстояние между цифрами, иначе будет считаться что это не одно число
set #accuracy 94                            // точность поиска для Findimage
set #deviation 22                            // погрешность оттенка  для Findimage
set #wait 0                                 // пауза между поиском картинок, если указать меньше искать будет быстрее, но нагрузит процессор
set #timeproc 500                          // время (в мсек) для поиска картинок, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 картинка
set #repeatimage 2                          // допустимое смещение координат, если используется несколько видов одной картинки

dir (%path $path $bmp)
set delimiter '   '

while 1 = 1
:aaa ////////// ПОИСК 1
set $path "C:\Users\Andrey\Desktop\Pil\ica\a"
dir (%path $path $bmp)
    set size(%result)                        // уничтожить массив с предыдущими результатами
    call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage
    if  size(%result) > 0         // если размер массива больше 0
        set $str
        set %z [1] \n
        for #i 1 size(%result)
            set $str $str%result[#i]
            if  #i != size(%result)
                set $str $str%z [1]
            end_if
        end_for
    else
        set $str 00
    end_if

:bbb ///////// ПОИСК 2
set $path "C:\Users\Andrey\Desktop\Pil\ica\b"
dir (%path $path $bmp)
set size(%result)
call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage
if  size(%result) > 0         // если размер массива больше 0
        set $str2
        set %z [1] \n
        for #i 1 size(%result)
            set $str2 $str2%result[#i]
            if  #i != size(%result)
                set $str2 $str2%z [1]
            end_if
        end_for
    else
        set $str2 00
    end_if

:ccc ///////// ПОИСК 3
set $path "C:\Users\Andrey\Desktop\Pil\ica\c"
dir (%path $path $bmp)
set size(%result)
call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage
if  size(%result) > 0         // если размер массива больше 0
        set $str3
        set %z [1] \n
        for #i 1 size(%result)
            set $str3 $str3%result[#i]
            if  #i != size(%result)
                set $str3 $str3%z [1]
            end_if
        end_for
        hint (14 clBlue 409, 265 ($str $str2 $str3)) // РЕЗУЛЬТАТ 3 ПОИСКОВ = 3 ЧИСЛА
    else
        set $str3 00
        hint (14 clBlue 409, 265 ($str $str2 $str3)) // РЕЗУЛЬТАТ 3 ПОИСКОВ = 3 ЧИСЛА
    end_if
end_while




// процедура поиска и сортировки
proc test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage
    set #GetStartX %GetImage [1 1]
    set #GetStartY %GetImage [1 2]
    set #GetEndX %GetImage [1 3]
    set #GetEndY %GetImage [1 4]
    set #current_script current_script
    // загрузка картинок в память
    if  size(%path) > 0                  // если картинки найдены
        for #i 1 size(%path)
            for #j 1 size(%picture)
                if  %path [#i 3] = %picture [#j]
                    set #n #n + 1
                    set %image [#n] LoadImage(%path [#i 1])
                    set %number [#n] %symbol [#j]
                    break
                end_if
            end_for
        end_for
    else
        log Картинки в: $path   не найдены
        log Скрипт остановлен
        stop_script #current_script
    end_if
    // поиск картинок и их сортировка
    set size(%result1)
    while size(%result1) = 0 and (#timeproc > timer or #timeproc = 0)
        set #z 0
        set %get GetImage(#GetStartX #GetStartY #GetEndX #GetEndY)      // сохранить часть экрана в память
        set #v %get [1 1]
        for #i 1 size(%number)
            set #a Findimage(0 0 %get [1 2] %get [1 3] (%image[#i 1]) %a #v #accuracy -1 #deviation)   // поиск
            if  #a < 0
                log Ошибка поиска картинки. Код ошибки: #a
                log Скрипт остановлен
                stop_script #current_script
            end_if
            if  #a > 0
                for #j 1 size(%a)
                    set #z #z + 1
                    init_arr %result1 (1 1 #z) %number[#i] %a[#j 1] %a[#j 2]   // запись результатов поиска в массив
                end_for
            end_if
            wait #wait
        end_for
        if  size(%result1) > 0
            gosub sortY        // сортировка по Y и X
        end_if
        set $b DeleteImage(%get[1 1])    // удалить изображение, полученное GetImage
    end_while
    goto end                 // выйти из процедуры
    :sortY
    ///// удаление повторных координат, если используется несколько видов одной картинки
        set #size 0
        set %tmp %result1
        set size(%result1)
        for #i 1 size(%tmp[1])
            set #break 0
            for #n 1 #size
                set #xrepeat %tmp[2 #i] - %result1[2 #n]
                set #yrepeat %tmp[3 #i] - %result1[3 #n]
                if  abs(#xrepeat) <= #repeatimage and abs(#yrepeat) <= #repeatimage
                    set #break 1
                    break
                end_if
            end_for
            if  #break = 0
                set #size #size + 1
                init_arr %result1 (1 1 #size) %tmp [1 #i]  %tmp [2 #i] %tmp [3 #i]
            end_if
        end_for
     ///////

        set #z 0
        set #z1 0
        set #z2 1
        set #z4 0
        sort_array %result1 -3
        while 1 = 1
            set #z 0
            set size(%tmp)
            for #i #z2 eval(size(%result1 [1]) - 1)
                set #j #i + 1
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) < #deltaY
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                else
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                    break
                end_if
            end_for
            set #z2 #z2 + #z
            if  #z2 = size(%result1[])
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) > #deltaY
                    set #jj #j
                    sort_array %tmp -2
                    set #z1 #z1 + 1
                    init_arr %result (#z1) %tmp [1]
                    gosub space
                    set size(%tmp)
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #jj]  %result1 [2 #jj] %result1 [3 #jj]
                    set #z1 #z1 + 1
                    set %result.#current_script [#z1] %tmp [1]
                    gosub end
                end_if
                set #z #z + 1
                init_arr %tmp (1 1 #z) %result1 [1 #j]  %result1 [2 #j] %result1 [3 #j]
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                gosub space
                break
            else
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                gosub space
            end_if
        end_while
    return

    :space
        set #z3 0
        set size(%space)
        set #z4 #z4 + 1
        //посчитать где нужны пробелы
        for #i 1 eval(size(%tmp[]) - 1)
            set #j #i + 1
            set #space  %tmp [2 #i] - %tmp [2 #j]
            if  abs(#space) > #deltaspace
                set #z3 #z3 + 1
                set %space[#z3] #j
            end_if
        end_for
        // вставить пробелы
        for #i 1 size(%space)
            set $str %result [#z4]
            set $str insert(" " $str %space[#i])
            set #j #i + 1
            set %space[#j] %space[#j] + #i
            set %result [#z4] $str
        end_for
        // сохранение массива в основном скрипте
        for #i 1 size(%result)
            set size(%tmp1)
            init_arr %tmp1 (1) %result [#i]
            for #j 1 size(%tmp1[1])
                set %result.#current_script [#i #j] %tmp1 [1 #j]
            end_for
        end_for
    return

    :end
end_proc

//////////////////////////////////////////////////


Сделал 3 последовательных поиска. Работает, но долго ищет, примерно за 3 секунды находятся все 3 числа, можно ускорить немного?)))
hint (14 clBlue 409, 265 ($str $str2 $str3)) // РЕЗУЛЬТАТ 3 ПОИСКОВ = 3 ЧИСЛА

set #timeproc 500 выставил 180
по логу через таймер все 3 числа находит за 1400мс, все равно долговато(
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 7.4.2017, 21:18
Сообщение #26


**********

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



Цитата
set #deviation 22 // погрешность оттенка для Findimage

Уменьшить, это слишком много.
Слежение за ходом выключить, если включено.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 7.4.2017, 21:23
Сообщение #27


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Цитата(cirus @ 7.4.2017, 22:18) *

Уменьшить, это слишком много.

Если уменьшить, то бывает не находит числа(
Я игрался с разными значениями

set #accuracy 94
set #deviation 22

такое вышло оптимальным.если уменьшать и то и то, то другие цифры бывает находит

Слежение за ходом- это что?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 7.4.2017, 21:25
Сообщение #28


**********

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



Цитата
Слежение за ходом- это что?

Прикрепленное изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 7.4.2017, 21:29
Сообщение #29


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Цитата(cirus @ 7.4.2017, 22:25) *

Прикрепленное изображение

уф со слежением 1400мс
без слежения 700мс
ну уже нормик)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 7.4.2017, 21:45
Сообщение #30


**********

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



Быстрее не будет, 3 поиска по 30+ картинок. Только если меньше картинок искать. Попробуйте скриптом, который выше, сделать из нескольких картинок одну.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 7.4.2017, 21:51
Сообщение #31


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Цитата(cirus @ 7.4.2017, 22:45) *

Быстрее не будет, 3 поиска по 30+ картинок. Только если меньше картинок искать. Попробуйте скриптом, который выше, сделать из нескольких картинок одну.

Ладно, сейчас испробую, интересно что выйдет из этого)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 7.4.2017, 22:07
Сообщение #32


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



4 картинки одной цифры сделал. Вообщем она полностью в красный закрашивается при #deviat 10
Архив с картинками прилепил, может что не так делаю.
А может можно искать картинку по вырезанному фону?)))

(IMG:https://i.yapx.ru/HqB4.png)


Прикрепленные файлы
Прикрепленный файл  22.rar ( 1,43 килобайт ) Кол-во скачиваний: 1744
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 7.4.2017, 22:38
Сообщение #33


**********

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



Пусть будет больше deviation, тогда меньше закрасит. В любом случае искать 1 картинку быстрее, чем 4.
Цитата
А может можно искать картинку по вырезанному фону?)))

Получится искать фон, а не число, т. е. даже если чисел нет вообще, то все картинки будут найдены. Т. к. чёрный фон найдётся, а пиксели цифр не сравниваются, т. к. закрашены.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.4.2017, 1:09
Сообщение #34


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
set #accuracy 94
set #deviation 22

попробуйте где-то 80-90 и 7-12.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 9.4.2017, 10:57
Сообщение #35


*****

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



Цитата(cirus @ 7.4.2017, 1:25) *


код
Код
// Поиск статичных точек на нескольких картинках

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

// остальное не менять
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

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

3. Попробуйте уменьшить точность поиска.

А есть скрипт для закраски фона? Что бы в ручную не красить а то мне нуно в ручную 600 картинок перекрашивать. Желательно, что бы моно было задавать несколько цветов фона (2-4 ЦВЕТА)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 9.4.2017, 12:02
Сообщение #36


**********

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



Цитата
А есть скрипт для закраски фона?

код
Код
// Закрашивание фона
set %path [1] "C:\Users\abc\Desktop\567"     // путь для сохранения картинок, сохранятся с теми же именами что и были
set $path "C:\Users\abc\Desktop\33"     // путь к анализируемым картинкам
init_arr %rgb (1) 255 0 0          // цвет для закрашивания фона в формате RGB

// цвета фона в формате RGB или десятичном, указывать можно любое количество
init_arr %fon (1) 16777215
//init_arr %fon (2) 255 182 102
//init_arr %fon (3) 0
//init_arr %fon (4)

set #deviat 5               // погрешность в цвете


// остальное менять не нужно
for #i 1 size(%fon)
    if  %fon [#i 2] = "" and  %fon [#i 3] = ""
        set #colortmp %fon [#i 1]
        set #rgb colortorgb (#colortmp  %fon[#i])
    end_if
end_for

dir(%picture $path *.bmp*)
for #i 1 size(%picture)
    set %a [#i] Loadimage (%picture [#i 1])
end_for

set linedelay 0
set workwindow windowhandle

for #k 1 size(%a)
set #delta %a [#k 4] - (%a [#k 4] - %a [#k 2] * 3 + 1)
    set #r %rgb [1 1]
    set #g %rgb [1 2]
    set #b %rgb [1 3]
    writemem #b %a [#k 1] b
    writemem #g eval(%a [#k 1] + 1) b
    writemem #r eval(%a [#k 1] + 2) b
    for #j 0 eval(%a [#k 3] - 1)
        for #i 0 #delta 3
            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

            for #l 1 size(%fon)
                if  #rmin <= %fon [#l 1] and #rmax >= %fon [#l 1] and #gmin <= %fon [#l 2] and #gmax >= %fon [#l 2] and #bmin <= %fon [#l 3] and #bmax >= %fon [#l 3]
                    set #rpaint %rgb [1 1]
                    set #gpaint %rgb [1 2]
                    set #bpaint %rgb [1 3]
                    writemem #rpaint #z5 b
                    writemem #gpaint #z4 b
                    writemem #bpaint #z3 b
                    break
                end_if
            end_for
        end_for
    end_for
    set $bmp SaveImage (%a [#k 1] %path [1]\%picture [#k 3].bmp)
end_for

hint (20 clRed 500 500 (Картинки сохранены))
wait 1000
hint (10 clblack 1920 1 (1))
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Отправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 9.4.2017, 14:00
Сообщение #37


*****

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



Цитата(cirus @ 9.4.2017, 12:02) *

код
Код
// Закрашивание фона
set %path [1] "C:\Users\abc\Desktop\567"     // путь для сохранения картинок, сохранятся с теми же именами что и были
set $path "C:\Users\abc\Desktop\22"     // путь к анализируемым картинкам
init_arr %rgb (1) 255 0 0          // цвет для закрашивания фона в формате RGB

// цвета фона в формате RGB, указывать можно любое количество
init_arr %fon (1) 10 25 31
init_arr %fon (2) 26 37 34
//init_arr %fon (3) 45 52 37
//init_arr %fon (4)

set #deviat 5               // погрешность в цвете
// остальное менять не нужно
dir(%picture $path *.bmp*)
for #i 1 size(%picture)
    set %a [#i] Loadimage (%picture [#i 1])
end_for

set linedelay 0
set workwindow windowhandle

set #delta %a [1 4] - (%a [1 4] - %a [1 2] * 3 + 1)
for #k 1 size(%a)
    set #r %rgb [1 1]
    set #g %rgb [1 2]
    set #b %rgb [1 3]
    writemem #b %a [#k 1] b
    writemem #g eval(%a [#k 1] + 1) b
    writemem #r eval(%a [#k 1] + 2) b
    for #j 0 eval(%a [1 3] - 1)
        for #i 0 #delta 3
            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

            for #l 1 size(%fon)
                if  #rmin <= %fon [#l 1] and #rmax >= %fon [#l 1] and #gmin <= %fon [#l 2] and #gmax >= %fon [#l 2] and #bmin <= %fon [#l 3] and #bmax >= %fon [#l 3]
                    set #rpaint %rgb [1 1]
                    set #gpaint %rgb [1 2]
                    set #bpaint %rgb [1 3]
                    writemem #rpaint #z5 b
                    writemem #gpaint #z4 b
                    writemem #bpaint #z3 b
                    break
                end_if
            end_for
        end_for
    end_for
   set $bmp SaveImage (%a [#k 1] %path [1]\%picture [#k 3].bmp)
end_for

hint (20 clRed 500 500 (Картинки сохранены))
wait 1000
hint (10 clblack 1920 1 (1))
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Отправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 9.4.2017, 14:24
Сообщение #38


**********

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



Цитата
Но есть маленький нюанс - Скрипт закрашивает по размеру пикселей первого изображения.

Исправил. Теперь можно указывать цвет фона в десятичном формате.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 9.4.2017, 22:07
Сообщение #39


*****

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



Цитата(cirus @ 9.4.2017, 14:24) *

Исправил. Теперь можно указывать цвет фона в десятичном формате.

Извиняюсь может я не так пользуюсь. Но разницы не вижу. Цвет в десятичном коде у меня не задается и размер обработки изображения прежний (IMG:style_emoticons/default/sad.gif)

Цитата(FREEON @ 9.4.2017, 22:05) *

Извиняюсь может я не так пользуюсь. Но разницы не вижу. Цвет в десятичном коде у меня не задается и размер обработки изображения прежний (IMG:style_emoticons/default/sad.gif)

ой сори я рачело, случайно код из своего спойлера вставил (IMG:style_emoticons/default/laugh.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 15.4.2017, 13:59
Сообщение #40


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Можете чуть пояснить как set #accuracy работает.

Пример 1. картинка 10х10- содержит 100 пикселей
set #accuracy 100
set #deviation 0
(IMG:https://i.yapx.ru/H5J9.png)

если #accuracy 100 , то в этой картинке должны совпасть все 100 пикселей.
если #accuracy 89, то в этой картинке должны совпасть любых 89 пикселей.
Правильно я понимаю?

Пример 2. картинка 9х10 - содержит 90 пикселей
(IMG:https://i.yapx.ru/H5LK.png)

если #accuracy 100 , то в этой картинке должны совпасть все 90 пикселей.
если #accuracy 89, то в этой картинке должны совпасть 89% от 90 = 89 х (1 / 100) Ч 90 = 80,1 пикселей.

Пример 3. картинка 5х7 - содержит 35 пикселей
(IMG:https://i.yapx.ru/H5LR.png)
если #accuracy 100 , то в этой картинке должны совпасть все 35 пикселей.
если #accuracy 89, то в этой картинке должны совпасть 89% от 35 = 89 х (1 / 100) Ч 35 = 31,15 пикселей.

Правильно я понимаю? Или немного не так?

Далее в картинке есть фон, который пилот вырезает и не учитывает.
(IMG:https://i.yapx.ru/H5Le.png)

минусуем 6 пикселей фона
35-6= 29
в итоге если #accuracy 89, то в этой картинке должны совпасть 89% от 29 = 89 Ч (1 / 100) Ч 29 = 25,81

округлим = 26 пикселей
Чтобы картинка нашлась в ней должно совпасть 26 пикселей из 29
и вывод: для мелких картинок можно ставить set #accuracy 100, ибо 2-3 пикселя погоды не сделают, скорость поиска от этого не упадет

------------------------------------------------------------------------------------
#accuracy 89
(IMG:https://i.yapx.ru/H5QR.png)
26 пикселей из 29 - картинка найдена
------------------------------------------------
#accuracy 89
(IMG:https://i.yapx.ru/H5QZ.png)
26 пикселей из 29 - картинка найдена
в данном случае пилот проходит по в 28 пикселям в картинке, а это тоже самое, что #accuracy 97-99
------------------------------------------------
#accuracy 89
(IMG:https://i.yapx.ru/H5Qn.png)
26 пикселей из 29 - картинка НЕ найдена (найдено всего 25 пикселей)
в данном случае пилот проходит по всем 29 пикселям в картинке, а это тоже самое, что #accuracy 100
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

11 страниц V < 1 2 3 4 > » 
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

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