1
Общие вопросы / Re: Помогите найти картинку
« on: December 04, 2019, 12:52:10 PM »Вот как отсеять например координаты в массиве которые находятся рядом в пределах 10 пикселей например и оставить только 1 пару.Code: (clickermann) [Select]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,Quote18: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 все переваривает, если несколько цветов ))