Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (6): [1] 2 3 4 5 6 »   

> Описание: Поиск скученности пикселей определенных цветов на указанной площади (с разбегом в цвете)
Kibor
Отправлено: 22 Января, 2014 - 02:27:54
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




findheapcolor - Ищет области на которых есть скученности пикселей определенных цветов. Можно искать на экране, окне или с двухмерном массиве int в котором находится изображение.

На видео демонстрируется работа этой функции в игре. Посмотреть видео поиска мобов в игре.
Тут демонстрируется поиск мультипликационного персонажа в реальном времени на видео.



Применяется для поиска объектов по указанию нескольких разных цветов которые есть в этом объекте и по ожидаемому размеру объекта (на этой площади должны найтись все пикселя). Можно указывать как разбежность цветов по RGB так и минимальное количество (оно может быть меньше) чем указанное количество цветов которые должны быть в объекте. Так же указывается область где больше не искать. Эта область располагается ниже первого найденного пикселя по Y и по середине по X.
К примеру одна сторона идентифицируется по 5 цветам
23432 6864554 99888 255 88989
а другая по
23432 6864554 99888 76645 88989
Поэтому в минимально требуемом количестве надо указать 4

Подобрать оптимальные цвета и их количество с учетом разбежности цвета можено с помощью этого инструмента Подбор Цвета Кибор.

синтаксис без разбежности в цвете:
findheapcolor(сколько_ищем, #color[0], #kol[0], сколько_цветов, сколько_цветов_надо_минимум, #x[0], #y[0], X_размер, Y размер, Размер_области_где не искать X, Размер_области_где не искать Y, старт_X_поиска, старт_Y_поиска, финиш_X_поиска, финиш_X_поиска, (указатель на окно или указатель на двухмерный массив int с изображением или -1));
синтаксис с разбежностью в цвете:
findheapcolor(сколько_ищем, #color[0], #kol[0], сколько_цветов, сколько_цветов_надо_минимум, #x[0], #y[0], X_размер, Y размер, Размер_области_где не искать X, Размер_области_где не искать Y, старт_X_поиска, старт_Y_поиска, финиш_X_поиска, финиш_X_поиска, Красный_меньше_на, Красный_больше_на, Зеленый_меньше_на, Зеленый_больше_на, Синий_меньше_на, Синий_больше_на , (указатель на окно или указатель на двухмерный массив int с изображением или -1));

Если первый параметр -1 - все искать.
#color[0] указатель на массив int в котором находятся искомые цвета пикселей
#kol[0] указатель на массив int в котором находятся сколько каждого цвета должно быть пикселей для того что бы цвет совпавшим считался. Например в kol[0] находится количество для color[0]. в kol[1] находится количество для color[1].
#x[0], #y[0] - int массив в котором будут координаты первого найденного пикселя в куче.

Возвращает количество найденных объектов.
Ошибки
-1 - массив приемника X меньше найденных скученностей
-2 - массив приемника X меньше найденных скученностей
-3 - размер ожидаемого объекта по X меньше области поиска
-4 - размер ожидаемого объекта по Y меньше области поиска
-5 - массив цветов меньше указанных в количестве в параметре 4
-6 - массив количества для каждого цвета меньше указанных в количестве в параметре 4

Пояснение:

Нажмите для увеличения


Пример поиска по картинке ниже. выберите 2 или 3 цвета:
CODE:
int min_col=3;//Найти если все три цвета
//int min_col = 2;//Достаточно только любых 2

int r=10;
int color[3];
color[0]=2366701; color[1]=5026082; color[2]=13387839;//Тут цвета
int kol[3];
kol[0]=55; kol[1]=55; kol[2]=55;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные
sleep(500);
int colors, xw, yw;
getdisplay(colors, xw, yw);
int k=findheapcolor(20, #color[0], #kol[0], 3, min_col, #x[0], #y[0], 15, 15, 50, 50, 0, 0, xw, yw, r, r, r, r, r, r, -1);

textbkcolor (8454143,255);
int n=0;
s:if (n<k)
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
n++;
goto s;
}
messagebox (format(k)+" объектов нашли");


Нажмите для увеличения





Пример поиска мобов по картинке ниже:
CODE:
int color[3];
int r=5;
color[0]=2899273; color[1]=2899273; color[2]=791579;//Тут цвета
int kol[3];
kol[0]=25; kol[1]=25; kol[2]=25;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные
sleep(500);
int colors, xw, yw;
getdisplay(colors, xw, yw);
int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 70, 80, 0, 0, xw, yw, r, r, r, r, r, r, -1);

textbkcolor (8454143,255);
int n=0;
s:if (n<k)
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
n++;
goto s;
}
messagebox (format(k)+" объектов нашли");


Нажмите для увеличения


еще..
CODE:
int r=10;
int color[3], kol[3];
int x[20], y[20];
int colors, xw, yw;
color[0]=15990775; color[1]=8847032; color[2]=4192909;
kol[0]=1; kol[1]=1; kol[2]=1;
sleep(500);
getdisplay(colors, xw, yw);
int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 50, 50, 0, 0, xw, yw, r, r, r, r, r, r, -1);

textbkcolor (8454143,255);
for (int n=0; n<k; n++)
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
}
messagebox (format(k)+" объектов нашли");


Нажмите для увеличения


===========================================

Так указывается поиск на заранее созданном скрине
CODE:
int a[3000][2000];//Выделяем память. Выделить можно больше, с запасом, но не меньше. Если выделить меньше размеров скрина вернет ошибку.
screen (#a[0][0], 100, 200, 712, 636, -1);

int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 15, 15, 50, 50, 475, 313, 575, 413, r, r, r, r, r, r, #a[0][0]);
//int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 15, 15, 50, 50, 475, 313, 575, 413, #a[0][0]);
 
 Top
rev41k
Отправлено: 22 Января, 2014 - 18:56:20
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  
Откуда: Молдова, Кишинев
Репутация: 0




чем быстрее искать при помощи finddynamic или findheapcolor?
 
 Top
Kibor
Отправлено: 22 Января, 2014 - 20:41:52
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 rev41k пишет:
чем быстрее искать при помощи finddynamic или findheapcolor?

хм.. зависит от ситуации... если правильно применять findheapcolor то им.
если в нее засунуть цвет который много в фоне, то долго будет.. но так делать не надо так как нет смысла. к примеру если открыть блокнот - белый и искать на нем белый цвет с
findheapcolor(-1, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 30, 30 то долго. но так делать никто не будет, так как нет логики искать в объекте цвет который много в фоне...


ну а при правильном применение конечно findheapcolor будет быстрее, особенно если поставить findheapcolor(-1, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 80, 80 побольше. его надо так выставить что бы весь в него влез объект.

finddynamic изначально должен иметь между собой паузу. что б успел сменить экран картинку.

короче если findheapcolor подходит - то он.
если объекты полностью разные имеют цвета - finddynamic
 
 Top
rev41k
Отправлено: 22 Января, 2014 - 21:19:07
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  
Откуда: Молдова, Кишинев
Репутация: 0




 Kibor пишет:
 rev41k пишет:
чем быстрее искать при помощи finddynamic или findheapcolor?

хм.. зависит от ситуации... если правильно применять findheapcolor то им.
если в нее засунуть цвет который много в фоне, то долго будет.. но так делать не надо так как нет смысла. к примеру если открыть блокнот - белый и искать на нем белый цвет с
findheapcolor(-1, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 30, 30 то долго. но так делать никто не будет, так как нет логики искать в объекте цвет который много в фоне...


ну а при правильном применение конечно findheapcolor будет быстрее, особенно если поставить findheapcolor(-1, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 80, 80 побольше. его надо так выставить что бы весь в него влез объект.

finddynamic изначально должен иметь между собой паузу. что б успел сменить экран картинку.

короче если findheapcolor подходит - то он.
если объекты полностью разные имеют цвета - finddynamic


Спасибо , учим findheapcolor();
 
 Top
Prusak
Отправлено: 05 Апреля, 2014 - 12:41:12
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 32
Дата рег-ции: Март 2014  
Репутация: 0




 Kibor пишет:
старт_X_поиска, старт_Y_поиска

если указать не 0,0 а допустим 640,35 чтоб сканировать не весь экран. то #x[0], #y[0] выдает искаженные координаты вообще в другой части экрана. хотя искомое находит.
 
 Top
HACMOPK
Отправлено: 05 Апреля, 2014 - 13:02:50
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2013  
Репутация: 4




 Prusak пишет:
 Kibor пишет:
старт_X_поиска, старт_Y_поиска

если указать не 0,0 а допустим 640,35 чтоб сканировать не весь экран. то #x[0], #y[0] выдает искаженные координаты вообще в другой части экрана. хотя искомое находит.

Работаешь с экранными координатами или с оконными?
 
 Top
Prusak
Отправлено: 05 Апреля, 2014 - 13:18:27
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 32
Дата рег-ции: Март 2014  
Репутация: 0




PHP:
win aa=window ("- ArcheAge - Mar 27 2014 (03:47:57) Аранзеб", "ArcheAge", -1);
activate(aa);
////////////////////////////////////
int min_col=3;//Найти если все три цвета
int xw=1024;
int yw=768;
int r=10;
int color[3];
color[0]=12696972; color[1]=11971194; color[2]=10983788;//Тут цвета
int kol[3];
kol[0]=2; kol[1]=2; kol[2]=2;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные
sleep(500);
findheapcolor(1, #color[0], #kol[0], 3, min_col, #x[0], #y[0], 15, 15, 50, 50, 0, 0, xw, yw, r, r, r, r, r, r, aa);
mousemove(x[0], y[0],aa);
messagebox(format(x[0])+","+format(y[0]));

окно
(Добавление)
хм.. похоже это у меня какие то проблемы. даже из примера поиск 3Д моделей мышка перемещается куда угодно только не на моба.
 
 Top
HACMOPK
Отправлено: 05 Апреля, 2014 - 15:30:29
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2013  
Репутация: 4




findheapcolor(1, #color[0], #kol[0], 3, min_col, #x[0], #y[0], 15, 15, 50, 50, 50, 70, xw, yw, r, r, r, r, r, r, aa);
mousemove(x[0]+50, y[0]+70,aa);
messagebox(format(x[0])+","+format(y[0]))
 
 Top
Prusak
Отправлено: 05 Апреля, 2014 - 15:56:27
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 32
Дата рег-ции: Март 2014  
Репутация: 0




 HACMOPK пишет:
findheapcolor(1, #color[0], #kol[0], 3, min_col, #x[0], #y[0], 15, 15, 50, 50, 50, 70, xw, yw, r, r, r, r, r, r, aa);
mousemove(x[0]+50, y[0]+70,aa);
messagebox(format(x[0])+","+format(y[0]))

спасибо заработало Улыбка но смысла не понял.
 Цитата:
#x[0], #y[0] - int массив в котором будут координаты первого найденного пикселя в куче.

я так подразумеваю что там находятся оконные координаты на который ссылается указатель аа,в mousemove как и в findheapcolor также имеется данный указатель. теперь получается функциям ссылающим на данный масив так же надо делать преписку +50 +70...ничего не понимаю поясните дураку как ето работает ?
 
 Top
HACMOPK
Отправлено: 05 Апреля, 2014 - 23:26:58
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2013  
Репутация: 4




Допустим ищем красный цвет на экране.( 0, 0, xw, yw);
находим в координатах 255,255
mousemove(x[0], y[0],aa); все хорошо.
далее мы знаем что красного цвета в координатах 50,70 нет, задаем поиск ( 50, 70, xw, yw);
находим, но начальной точкой поиска служит точка 50,70 в результате получаем координаты 205,185.
mousemove(x[0], y[0],aa); начинает "движение" с 0,0 и приходит в координату 205,185.
Как- то так.
 
 Top
Страниц (6): [1] 2 3 4 5 6 »
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by