Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Доработана функция findimage.
А конкретнее ее расширенный вариант для поиска по неполному совпадению.
Добавлен еще один параметр:
Цитата: 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 больше не искать в областях на экране по размеру искомого рисунка где найден уже рисунок.
Объяснение:
При поиске изображений к примеру разной яркости или имеющие различные незначительные расхождения можно использовать или разброс цветов или/и процент совпадения пикселей. Применение таких погрешностей может привести к нахождению более одного совпадения практически там где в наличие только один рисунок.
К примеру как на рисунке может быть найдено два и более совпадения (синяя и красные рамки)
Установив параметр флаг_не_искать_в_области_где_найдено в 1 можно запретить поиск с областях где уже нашли одно совпадение (область перекрытая синей и красной рамкой сразу).
Пример использования:
Скачать этот рисунок пешки:http://kibor-bot.com/files/peshka.rar
Рапаковать на диск С. Рисунок должен быть в C:\peshka\peshka.bmp
Скопировать скрипт в Кибор:
CODE:int Image_0[27][48];
int color, xe, ye;
sleep(1000);
getdisplay(color, xe, ye);
loadimage (#Image_0[0][0], "C:\peshka\peshka.bmp");
int PosX_0[512];int PosY_0[512];
int k=findimage(-1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, xe, ye, 50, 50, 50, 50, 50, 50, 90, 1, -1);
int n=0;
j:if (n<k)
{
mousemove(PosX_0[n]+imagewidth(#Image_0[0][0])/2, PosY_0[n]+imageheight(#Image_0[0][0])/2);
sleep(500);
n++;
goto j;
}
messagebox(k);
И протестировать на этом изображение. Тут все пешки имеют небольшое различие и короткая функция их не найдет. В тесте попробуйте установить предпоследний параметр в 0. На одну пешку будет несколько найденных изображений:
|