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

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

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

> Описание: Реализация поиска изображения по неполному совпадению.
Kibor
Отправлено: 22 Июля, 2013 - 00:29:46
Post Id



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


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




В этой версии:

1) Произведен фикс непредсказуемого вылета программы.

2)Реализована функция поиска 2D изображений на экране по неполному совпадению.
Появилась возможность указывать в функции поиска изображений findimage дополнительные параметры с помощью которых можно указать разброс цветов в виде RGB в пределах которых пикселя исходного изображения и изображения на экране будет считаться идентичным.
Так же возможно указать процент пикселей участвующих в поиске (не учитывая фоновые участки) полного или в пределах параметров разброса RGB достаточно для идентификации изображения как совпавшего.

Пример использования:
CODE:
findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1366, 768, Красный_меньше_на, Красный_больше_на, Зеленый_меньше_на, Зеленый_больше_на, Синий_меньше_на, Синий_больше_на, Процент_совпадений_достаточный_для_идентификации, флаг_не_искать_в_области_где_найдено, -1);


Объяснение:
Каждый цвет состоит из трех основных цветов - Красный(R), Зеленый(G), Синий(B). (R, G, B). Каждый из этих трех цветов обозначается числом от 0 до 255. К примеру цвет (0, 0, 0) будет черный, а (255, 255, 255) белым. (255, 0, 0) красным, а (255, 50, 70) красным с примесью зеленого и синего.

Обозначение параметров:
Красный_меньше_на - тут указываем число НА которое красный компонент может быть меньше того что находится в поиске.
Красный_больше_на - тут указываем число НА которое красный компонент может быть больше того что находится в поиске.
Зеленый_меньше_на, Зеленый_больше_на, Синий_меньше_на, Синий_больше_на аналогично.

Процент_совпадений_достаточный_для_идентификации - процент от общего количества пикселей участвующих в поиске достаточный для того что бы изображение считалось совпавшим. 100 - необходимо что бы все изображение совпало. 20 - достаточно совпадения одной пятой части изображения. Применять для поиска изображений которые могут частично быть перекрыты или часть цвета пикселей может выйти за пределы колебаний описанных вышеприведенными параметрами.

флаг_не_искать_в_области_где_найдено - если не 1 больше не искать в областях на экране по размеру искомого рисунка где найден уже рисунок.

Пример:
CODE:
findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1366, 768, 20, 50, 50, 70, 10, 20, 33, 1, -1);

Ищем изображение совпавшее хотя бы на одну треть от того что ищем с колебаниями ДО:
меньше на 20 - больше на 50 красный, меньше на 50 - больше на 70 Зеленый, меньше на 10 - больше на 20 Синий.


Для сто процентного поиска изображений не нуждающихся в параметрах колебаний по цвету и процентного отношения необходимо применять функцию findimage без этих параметров:
CODE:
findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1366, 768, -1);
 
 Top
Kibor
Отправлено: 25 Июля, 2013 - 14:19:52
Post Id



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


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




Добавлена функция gettime
Возвращает время в милисекундах с момента запуска Windows.
Пример:
CODE:
int time=gettime();
или
messagebox(gettime());


Применять для указания больших пауз в выполнение скрипта. Во время этих пауз скрипт возможно остановить с помощью CTRL+SHIFT+Z не дожидаясь окончания паузы.

Пример использования:
CODE:
int time1, time2;
messagebox("Старт скрипта");
time1=gettime();
time2=time1;
a: if (time2-time1<10000){time2=gettime(); sleep(10); goto a;}
messagebox("Пауза 10 секунд.");
 
 Top
Kibor
Отправлено: 25 Июля, 2013 - 18:10:27
Post Id



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


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




Добавлена функция приводящая целое число int или дробное double к string

Пример применения format:
CODE:
int a=5;
messagebox ("Переменная a равна "+format(a));


CODE:
double a=5;
messagebox ("Переменная a плюс 0.27 равна "+format(a+0.27));


Применение format для копирования массива char в string.

Пример 1 (копирование всего масива начиная с нулевого индекса):
Будет qwert и еще какой то мусор, пока не встретим 0
CODE:
char a[5];
a[0]='q';
a[1]='w';
a[2]='e';
a[3]='r';
a[4]='t';
string s=format(#a[0]);//Копируем весь масив до нуля (когда a[...]==0). Означает конец строки
messagebox(s);



Поэтому на до в конце массива char ставить 0
CODE:
char a[6];
a[0]='q';
a[1]='w';
a[2]='e';
a[3]='r';
a[4]='t';
a[5]=0;
string s=format(#a[0]);//Копируем весь масив до нуля (когда a[...]==0). Означает конец строки
messagebox(s);



или

Пример 2 (копирование части масива начиная не с нулевого индекса):
CODE:
char a[5];
a[0]='q';
a[1]='w';
a[2]='e';
a[3]='r';
a[4]='t';
string s=format(#a[2], 3);//Указываем вторым параметром количество элементов которые надо скопировать
messagebox(s);
//В s строка ert

char a[5];
a[0]='q';
a[1]='w';
a[2]='e';
a[3]='r';
a[4]='t';
string s=format(#a[2], 2);//Указываем вторым параметром количество элементов которые надо скопировать
messagebox(s);

//В s строка er

Пример получения строки с двухмерного массива
CODE:
char c[200][100];
c[0][0]='с'; c[0][1]='т'; c[0][2]='р'; c[0][3]='о'; c[0][4]='к'; c[0][5]='а'; c[0][6]=0;
c[1][0]='е'; c[1][1]='щ'; c[1][2]='е'; c[1][3]=0;

string s=format(#c[0][0]);
messagebox (s);//выведет "строка"

s=format(#c[1][0]);
messagebox (s);//выведет "еще"








Если копирование идет не с нулевого индекса надо ставить второй параметр, так как иначе будет скопированны данные которые идут дальше в памяти.
 
 Top
sicosha
Отправлено: 25 Июля, 2013 - 18:38:01
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2013  
Репутация: 1




Спасибо за добавление:
" Добавлена функция приводящая целое число int или дробное double к string"
 
 Top
Kibor
Отправлено: 27 Июля, 2013 - 20:30:17
Post Id



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


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




1) Добавлены математические и геометрические функции:

CODE:
pow (5, 6); // возвращает число double равное возведению 5 во 6 степень. Принимает в виде параметров int или double

sqrt (157); // возвращает число double равное корню числа 157. Принимает в виде параметров int или double

cos (60); // возвращает число double равное косинусу 60 градусов. Принимает в виде параметров int или double

sin (30); // возвращает число double равное синусу 30 градусов. Принимает в виде параметров int или double

tan (50); // возвращает число double равное тангенсу 50 градусов. Принимает в виде параметров int или double

acos (0.5); // возвращает число double равное Акосинусу 0.5. Принимает в виде параметров double

asin (0.5); // возвращает число double равное Асинусу 0.5. Принимает в виде параметров double

atan (1.2); // возвращает число double равное Атангенсу 1.2. Принимает в виде параметров double



2) Добавлена функция sort
Функция имеет две вариации.

Назначение первой вариации функции сортировка элементов в масиве по возрастанию:

CODE:
sort(#a[0], 5);

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

Пример
CODE:
int a[5];
a[0]=10; a[1]=5; a[2]=6; a[3]=1; a[4]=2;
sort(#a[0], 5);//Сортировка массива по возрастанию
int h=0;
y:if (h<5)
{
messagebox (a[h]);//Тут идет по одному вывод элементов массива по возрастанию.
h++;
goto y;
}

Или
CODE:
string i="";
int a[5];
a[0]=10; a[1]=5; a[2]=6; a[3]=1; a[4]=2;
sort(#a[0], 5);
int h=0;
y:if (h<5)
{
i=i+" "+format(a[h]);
h++;
goto y;
}
messagebox (i);//Тут идет вывод строкой



Назначение второй вариации функции сортировка элементов в двух массивах координат X Y по расстоянию от указанных в функции координат.
Использовать к примеру для сортировки координат XY полученных с помощью функции finddynamic или findimage от конкретной точки на экране по расстоянию:

CODE:
sort(300, 200, #x[0], #y[0], 20);

Первый и второй параметры координаты XY относительно которых будет сортировка массивов координат x[0] y[0] по расстоянию.
Третий и четвертый указатели на массивы координат XY полученные с помощью finddynamic или findimage.
Пятый число элементов в массивах начиная с первого которые будут участвовать в сортировке.
 
 Top
sicosha
Отправлено: 28 Июля, 2013 - 10:24:19
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2013  
Репутация: 1




Всегда слежу за обновлениями! Огромное спасибо( особенно за степень и корень) Подмигивание Подскажите пожалуйста, каким методом реализована сортировка?
 
 Top
Kibor
Отправлено: 28 Июля, 2013 - 11:36:56
Post Id



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


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




 sicosha пишет:
Всегда слежу за обновлениями! Огромное спасибо( особенно за степень и корень) Подскажите пожалуйста, каким методом реализована сортировка?

Пожалуйста. Самым простым ,пузырьковым.
 
 Top
Kibor
Отправлено: 29 Июля, 2013 - 00:14:43
Post Id



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


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




1) Добавлена функция strcpy копирующая string в массив char

CODE:
strcpy(#a[0], "строка");

Первый параметр указатель на массив char. Он должен быть на 1 больше количества символов в строке.
Второй - строка string которую скопируем в массив.
В первый элемент массива после строки запишется 0

Пример заполнения двухмерного массива char построчно

 Цитата:
char c[200][100];
strcpy(#c[0][0], "строка");
strcpy(#c[1][0], "еще");

//В памяти будет
c[0][0]='с', c[0][1]='т', c[0][2]='р', c[0][3]='о', c[0][4]='к', c[0][5]='а', c[0][6]=0;
c[1][0]='е', c[1][1]='щ', c[1][2]='е', c[1][3]=0;

messagebox (format(#c[0][0]));//"строка"
messagebox (format(#c[1][0]));//"еще"






2) Добавлена функция size. Она возвращает количество элементов массива char до первого нуля или длину строки string.
CODE:
int size_char=size(#a[0]);//Узнаем количество элементов в массиве char до первого нуля

CODE:
int size_char=size("привет, это строка");//Узнаем количество элементов в строке


Параметр принимает указатель на массив char или string


Пример использования:
CODE:
char a[256];//Сюда будем копировать. Размер массива хоть на 1 элемент должен больше быть строки, поскольку 1 элемент массива после строки заполнится нулем
string b="qwertyuio";
strcpy(#a[0], b);//Копируем string в массив char. После последнего элемента строки в массиве запишется 0
int size_char=size(#a[0]);//Узнаем количество элементов в массиве char до первого нуля
int h=0;
i:if (h<size_char)
{
messagebox(a[h]);
h++;
goto i;
}


Пример как добавить строку к уже записанной с массив
CODE:
char a[256];//Сюда будем копировать. Размер массива хоть на 1 элемент должен больше быть строки, поскольку 1 элемент массива после строки заполнится нулем
string b="qwert-";
strcpy(#a[0], b);//Копируем string в массив char. После последнего элемента строки в массиве запишется 0

string b1="добавка";
int size_char=size(#a[0]);//Узнаем количество элементов в массиве char до первого нуля
strcpy(#a[size_char], b1);//Копируем в массив начиная с указателя на элемент с концом строки (нулем)

size_char=size(#a[0]);//Узнаем количество элементов в массиве char до первого нуля
int h=0;
i:if (h<size_char)
{
messagebox(a[h]);
h++;
goto i;
}


пример получения размера строки двухмерного массива char
 Цитата:
char c[200][100];
c[0][0]='с', c[0][1]='т', c[0][2]='р', c[0][3]='о', c[0][4]='к', c[0][5]='а', c[0][6]=0;
c[1][0]='е', c[1][1]='щ', c[1][2]='е', c[1][3]=0;

int N=size(#c[0][0]);//в N будет размер "строка". то есть 6
N=size(#c[1][0]);//в N будет размер "еще". то есть 3








3) Добавлена функция getkeystate. С помощью нее можно узнать состояние кнопок клавиатуры и мыши - нажаты\не нажаты.

Принимает параметр int - код клавиши мыши или клавиатуры. Так же можно в виде параметра указывать константу. Коды клавиш и константы можно узнать в Таблица кодов клавиш клавиатуры и кнопок мыши
Возвращает 1 если кнопка нажата. 0 если не нажата.
CODE:
getkeystate(65)//Вернут состояние клавиши A
getkeystate(RETURN)//Вернут состояние клавиши Enter
getkeystate(LBUTTON)//Вернут состояние левой кнопки мыши


Пример
CODE:
int n=0;
u: if (n<222)
{
if (getkeystate(n)==1)
{
if (n==27)goto exit;//Нажат Esc. Выход
messagebox("Нажата клавиша с кодом "+format(n));
}
n++;
goto u;
}
n=0;
goto u;
exit:;
 
 Top
Andrew
Отправлено: 15 Августа, 2013 - 02:19:21
Post Id



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


Покинул форум
Сообщений всего: 118
Дата рег-ции: Июнь 2013  
Откуда: Россия
Репутация: 9




А нет функции, которая приводит int к double.
 Цитата:

5,87=6
5,32=5
 
 Top
Kibor
Отправлено: 15 Августа, 2013 - 02:34:42
Post Id



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


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




 Andrew пишет:
функции, которая приводит int к double.
Цитата:

5,87=6
5,32=5


В смысле?
Таких выражений вообще нет. Присваивать значение можно только переменной а не другому значению.
А так, то и int и double присваиваются и арефметизируются между собой как хочешь.
Просто если к целочисленной переменной int присваивается дробное число то в переменную запишется целое без учета дроби.

int a=5.2;
В a запишется 5
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0)
« О программе Кибор »


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




Powered by