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);
}
// загрузить картинки
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.
Цитата:
И если их размер поменяется то тоже не найти их?
Тогда нужно другие картинки. Зависит от того насколько изменится размер, если незначительно, то можно сделать 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);
}
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);
}