Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: PasqualeAcosta on December 02, 2019, 12:00:31 AM
-
Вечер добрый! Перепробовал и вырезать по разному и работал с колормодами. Но никак не получается точно определять красные шары. Суть в том что пиксели немного пляшут, плюс в зависимости от удаления объект становится меньше...
Скрин во вложении. Может попробовать искать по уровням, но там тоже иконка при удалении становится меньше.
Подскажите, может будут еще какие то варианты, интересные идеи?
-
Искать какой нибудь из оттенков красного. Скорее всего в COLORMODE 6. Считать количество этого цвета в области.
Проверять область правее, где соседний маркер-кружок, считать в нём серые ИЛИ жёлтые пиксели. Так мы отсекаем другие места где достаточно красного (стрелки, гребень огромного крокодила). Это при условии что нам известны все эти доп цвета.
А ещё лучше сделать наоборот: Искать круги с жёлтым/серым и слева зону проверять на наличие нужного красного.
-
Искать какой нибудь из оттенков красного. Скорее всего в COLORMODE 6. Считать количество этого цвета в области.
Проверять область правее, где соседний маркер-кружок, считать в нём серые ИЛИ жёлтые пиксели. Так мы отсекаем другие места где достаточно красного (стрелки, гребень огромного крокодила). Это при условии что нам известны все эти доп цвета.
А ещё лучше сделать наоборот: Искать круги с жёлтым/серым и слева зону проверять на наличие нужного красного.
Случаем нету примера чего то подобного, может кто то уже реализовывал похожее (на форуме чет пока не нахожу)? Т.к. с нуля с ума сойду такое реализовывать.
Я могу уменьшить процент совпадения и найти все что нужно, но как и написано попадается много лишнего, или дублируются координаты (-+ 1 пиксель). Не могу понять как реализовать дополнительные отборы в массиве.
-
Возможно поможет такое решение?
http://crapware.aidf.org/forum/index.php?topic=2409.msg15142#msg15142
-
Какие здесь примеры. На форуме, каждый второй скрипт это пример "подобного".
А чтоб пример был рабочим, нужно знать что может появиться в этих кружках? какие цвета. Как там с вариацией цвета, а то потом выяснится как всегда, что там всё переливается в анимации.
Скрины от большого до малого размера какие бывают. Ну и все скрины естественно не jpeg
-
Какие здесь примеры. На форуме, каждый второй скрипт это пример "подобного".
А чтоб пример был рабочим, нужно знать что может появиться в этих кружках? какие цвета. Как там с вариацией цвета, а то потом выяснится как всегда, что там всё переливается в анимации.
Скрины от большого до малого размера какие бывают. Ну и все скрины естественно не jpeg
Никакая анимация на круги не влияет. Влияет только удаление и соответственно размер.
На скрине как раз они с разной удаленностью.
Прикладываю еще пару скринов в колормоде 6 и формат бмп24 для наглядности
Вложить не могу, размер не дает, можно по ссылке посмотреть https://yadi.sk/d/rg83vWnR2NAEPQ
-
по моему ники не зумируются, а это значит, что можно обойтись поиском белого пикселя и простой сортировкой
-
по моему ники не зумируются, а это значит, что можно обойтись поиском белого пикселя и простой сортировкой
Зумируются( Анимации глаз по крайней мере точно не видит, но пиксили даже при равном размере все равно немного пляшут. В общем задница какая то.
Получается иногда сделать так что б все находило при низком уровне совпадения, но выходит так что б влижних кругах скрипт находит картинку сразу много раз с разницей в 1-2 пикселя по координатам. Вот как отсеять например координаты в массиве которые находятся рядом в пределах 10 пикселей например и оставить только 1 пару.
-
Вот как отсеять например координаты в массиве которые находятся рядом в пределах 10 пикселей например и оставить только 1 пару.
SUB(cleaning)
UNDEFINE($clear)
$a_scansize = ARRSIZE($a_scan)
LOGWRITE("Найдено изображений: ", $a_scansize/2)
FOR($j=0, $j < $a_scansize, 2)
$X = $a_scan[$j]
$Y = $a_scan[$j+1]
$dead_zone = 0
$clear_size = ARRSIZE($clear)
FOR($m=0, $m < $clear_size, 2)
$X_old = $clear[$m]
$Y_old = $clear[$m+1]
//LOGWRITE("X/X_old = ", $X, "/", $X_old)
//LOGWRITE("ABS ", ABS($X - $X_old), "/", ($Y - $Y_old))
IF((($Y - $Y_old) <= $dead_Y) & (ABS($X - $X_old) <= $dead_X))
$dead_zone = 1
$m = $clear_size + 10
LOGWRITE("---Дубль!--- ", $X, "/", $Y)
END_IF
END_CYC
IF($dead_zone = 0)
ARRPUSH($clear, $X)
ARRPUSH($clear, $Y)
//LOGWRITE("добавляем ", $X, "/", $Y)
END_IF
END_CYC
END_SUB
// тестовые данные
$dead_X = 5
$dead_Y = 5
STRSEPARATE("22,60,29,62,25,64,200,66,210,66,205,88,207,88", ",", $a_scan)
// боевые данные
//$dead_X = 10
//$dead_Y = 10
//UNDEFINE($a_scan)
//SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, "pic.bmp", -1, 100)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOGCLEAR
LOGWRITE("Мёртвая зона x/y ", $dead_X, "/", $dead_Y, " px")
LOGWRITE("")
LOGWRITE("Было")
FOR($i = 0, $i < ARRSIZE($a_scan), 2)
LOGWRITE ($a_scan[$i], " : ", $a_scan[$i+1])
END_CYC
LOGWRITE("")
cleaning()
LOGWRITE("")
LOGWRITE("Стало")
FOR($i = 0, $i < ARRSIZE($clear), 2)
LOGWRITE ($clear[$i], " : ", $clear[$i+1])
END_CYC
HALT
Результат в массиве $clear,
18:03:16 Мёртвая зона x/y 5/5 px
18:03:16
18:03:16 Было
18:03:16 22 : 60
18:03:16 29 : 62
18:03:16 25 : 64
18:03:16 200 : 66
18:03:16 210 : 66
18:03:16 205 : 88
18:03:16 207 : 88
18:03:16
18:03:16 Найдено изображений: 7
18:03:16 ---Дубль!--- 25/64
18:03:16 ---Дубль!--- 207/88
18:03:16
18:03:16 Стало
18:03:16 22 : 60
18:03:16 29 : 62
18:03:16 200 : 66
18:03:16 210 : 66
18:03:16 205 : 88
-
Вот как отсеять например координаты в массиве которые находятся рядом в пределах 10 пикселей например и оставить только 1 пару.
SUB(cleaning)
UNDEFINE($clear)
$a_scansize = ARRSIZE($a_scan)
LOGWRITE("Найдено изображений: ", $a_scansize/2)
FOR($j=0, $j < $a_scansize, 2)
$X = $a_scan[$j]
$Y = $a_scan[$j+1]
$dead_zone = 0
$clear_size = ARRSIZE($clear)
FOR($m=0, $m < $clear_size, 2)
$X_old = $clear[$m]
$Y_old = $clear[$m+1]
//LOGWRITE("X/X_old = ", $X, "/", $X_old)
//LOGWRITE("ABS ", ABS($X - $X_old), "/", ($Y - $Y_old))
IF((($Y - $Y_old) <= $dead_Y) & (ABS($X - $X_old) <= $dead_X))
$dead_zone = 1
$m = $clear_size + 10
LOGWRITE("---Дубль!--- ", $X, "/", $Y)
END_IF
END_CYC
IF($dead_zone = 0)
ARRPUSH($clear, $X)
ARRPUSH($clear, $Y)
//LOGWRITE("добавляем ", $X, "/", $Y)
END_IF
END_CYC
END_SUB
// тестовые данные
$dead_X = 5
$dead_Y = 5
STRSEPARATE("22,60,29,62,25,64,200,66,210,66,205,88,207,88", ",", $a_scan)
// боевые данные
//$dead_X = 10
//$dead_Y = 10
//UNDEFINE($a_scan)
//SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, "pic.bmp", -1, 100)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOGCLEAR
LOGWRITE("Мёртвая зона x/y ", $dead_X, "/", $dead_Y, " px")
LOGWRITE("")
LOGWRITE("Было")
FOR($i = 0, $i < ARRSIZE($a_scan), 2)
LOGWRITE ($a_scan[$i], " : ", $a_scan[$i+1])
END_CYC
LOGWRITE("")
cleaning()
LOGWRITE("")
LOGWRITE("Стало")
FOR($i = 0, $i < ARRSIZE($clear), 2)
LOGWRITE ($clear[$i], " : ", $clear[$i+1])
END_CYC
HALT
Результат в массиве $clear,
18:03:16 Мёртвая зона x/y 5/5 px
18:03:16
18:03:16 Было
18:03:16 22 : 60
18:03:16 29 : 62
18:03:16 25 : 64
18:03:16 200 : 66
18:03:16 210 : 66
18:03:16 205 : 88
18:03:16 207 : 88
18:03:16
18:03:16 Найдено изображений: 7
18:03:16 ---Дубль!--- 25/64
18:03:16 ---Дубль!--- 207/88
18:03:16
18:03:16 Стало
18:03:16 22 : 60
18:03:16 29 : 62
18:03:16 200 : 66
18:03:16 210 : 66
18:03:16 205 : 88
Большое спасибо. Думаю этот вариант будет намного быстрее работать, пошел тестить. А то пришлось убирать массивы, делать через цикл if_picture.. и каждый раз перекрашивать пиксели. На удивление даже все заработало, но секунды 3 иногда 5 все переваривает, если несколько цветов ))