Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Как найти картинки по очереди?

Страниц (1): [1]
 

1. Gorago - 11 Мая, 2023 - 00:02:43 - перейти к сообщению
Каким способом лучше искать картинки на экране? Пример картинок(для просмотра ссылки Вам необходимо авторизоваться) Мне нужно найти все изображения треугольников, по очереди, вначале все треугольники одного цвета, потом второго и третьего. И уже после их нахождения в зависимости от цвета кликнуть левой кнопкой мыши на желтые, правой зеленые, двойной клик на фиолетовые.
2. Zireael - 11 Мая, 2023 - 02:10:31 - перейти к сообщению
CODE:
int Image[3][99][99]; // массив для картинок

// загрузить картинки
loadimage (#Image[0][0][0], "D:\Kibor2\Image_0.bmp"); // жёлтый треугольника
loadimage (#Image[1][0][0], "D:\Kibor2\Image_1.bmp"); // зелёный
loadimage (#Image[2][0][0], "D:\Kibor2\Image_2.bmp"); // фиолетовый

// массивы для координат найденных треугольников
int PosX_0[999], PosY_0[999];
int PosX_1[999], PosY_1[999];
int PosX_2[999], PosY_2[999];

int coord[4] = { 0, 0, 1920, 1080}; // координаты поиска
int p=100; // точность
int r=5; // отклонение цвета

// поиск картинок
int k0 = findimage(SWIFT, -1, #Image[0][0][0], 0, #PosX_0[0], #PosY_0[0], coord[0],coord[1],coord[2],coord[3], r,r,r,r,r,r,p,1,-1);
int k1 = findimage(SWIFT, -1, #Image[1][0][0], 0, #PosX_1[0], #PosY_1[0], coord[0],coord[1],coord[2],coord[3], r,r,r,r,r,r,p,1,-1);
int k2 = findimage(SWIFT, -1, #Image[2][0][0], 0, #PosX_2[0], #PosY_2[0], coord[0],coord[1],coord[2],coord[3], r,r,r,r,r,r,p,1,-1);

messagebox("Найдено жёлтых: " + format(k0));
messagebox("Найдено зелёных: " + format(k1));
messagebox("Найдено фиолетовых: " + format(k2));

int i;
for(i=0; i<k0; i++)
{
mouse(LEFT, PosX_0[i] + coord[0], PosY_0[i] + coord[1]); // клик левой кнопкой мыши
sleep(500);
}

for(i=0; i<k1; i++)
{
mouse(RIGHT, PosX_1[i] + coord[0], PosY_1[i] + coord[1]); // клик правой кнопкой мыши
sleep(500);
}

for(i=0; i<k2; i++)
{
mousedbl(LEFT, PosX_2[i] + coord[0], PosY_2[i] + coord[1]); // двойной клик левой кнопкой мыши
sleep(500);
}

Пример картинки для поиска: https://ibb.co/g9V4Kmv
Т. к. цвет фона указан 0, то все пиксели чёрного цвета при поиске учитываться не будут.
3. Gorago - 11 Мая, 2023 - 09:35:11 - перейти к сообщению
Не находит все треугольники, если точность ниже 90 делаю то находит зеленых больше чем их есть на экране. Фиолетовые тоже не все находит. И если их размер поменяется то тоже не найти их?
4. Zireael - 11 Мая, 2023 - 09:52:48 - перейти к сообщению
Треугольники отличаются по краям, это видно при увеличении. Когда делаете картинку для поиска нужно чтобы края не были искомыми пикселями.
 Цитата:
И если их размер поменяется то тоже не найти их?

Тогда нужно другие картинки. Зависит от того насколько изменится размер, если незначительно, то можно сделать 1 шаблон.
Можно использовать findheapcolor, тогда размер не важен.

Ещё можно удалить из массива лишние изображения.
(Добавление)
Поиск через findheapcolor.
CODE:
// массивы для координат найденных треугольников
int PosX_0[999], PosY_0[999];
int PosX_1[999], PosY_1[999];
int PosX_2[999], PosY_2[999];

int coord[4] = { 0, 0, 1920, 1080}; // координаты поиска

int yellow[1] = { 46847 }; // жёлтый
int green[1] = { 65450 }; // зелёный
int purple[1] = { 16713169 }; // фиолетовый
int r=5; // отклонение цвета

int kol[1] = { 200 }; // сколько должно совпасть пикселей

// поиск картинок
int k0 = findheapcolor(999, #yellow[0], #kol[0], 1, 1, #PosX_0[0], #PosY_0[0], 70, 40, 50, 50, coord[0], coord[1], coord[2], coord[3], r,r,r,r,r,r, -1);
int k1 = findheapcolor(999, #green[0], #kol[0], 1, 1, #PosX_1[0], #PosY_1[0], 40, 40, 50, 50, coord[0], coord[1], coord[2], coord[3], r,r,r,r,r,r, -1);
int k2 = findheapcolor(999, #purple[0], #kol[0], 1, 1, #PosX_2[0], #PosY_2[0], 40, 40, 50, 50, coord[0], coord[1], coord[2], coord[3], r,r,r,r,r,r, -1);



messagebox("Найдено жёлтых: " + format(k0));
messagebox("Найдено зелёных: " + format(k1));
messagebox("Найдено фиолетовых: " + format(k2));


int i;
for(i=0; i<k0; i++)
{
mouse(LEFT, PosX_0[i] + coord[0], PosY_0[i] + coord[1] + 20); // клик левой кнопкой мыши
sleep(500);
}

for(i=0; i<k1; i++)
{
mouse(RIGHT, PosX_1[i] + coord[0], PosY_1[i] + coord[1] + 20); // клик правой кнопкой мыши
sleep(500);
}

for(i=0; i<k2; i++)
{
mousedbl(LEFT, PosX_2[i] + coord[0], PosY_2[i] + coord[1] + 20); // двойной клик левой кнопкой мыши
sleep(500);
}

Powered by ExBB FM 1.0 Final