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

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

1. Kwaga - 15 Марта, 2022 - 17:06:07 - перейти к сообщению
Приветствую!
Гуру помогите пожалуйста, есть инвентарь, нужно посчитать количество слотов свободных и записать это в какую то переменную, что бы потом использовать это количество для цикла loop.
Логика такая:
1. Перемещаю мышку в правый нижний угол каждого слота
2. Слот подсвечивается белым цветом
3. ScanPixel проверяет центр слота
4. Если он пустой будет белый цвет, соответственно свободен (записываем +1 к количеству свободных слотов)
5. Если слот не белый значит занят(ничего не записываем к количеству свободных слотов)
Не хватает знаний пока что((( Пытаюсь это сделать в визуальном редакторе.
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
2. Zireael - 15 Марта, 2022 - 18:58:02 - перейти к сообщению
Проще через findimage искать изображение пустого слота. Функция вернёт количество.
3. Kwaga - 15 Марта, 2022 - 19:02:20 - перейти к сообщению
 Zireael пишет:
Проще через findimage искать изображение пустого слота. Функция вернёт количество.

Там фон полупрозрачный((
И из за этого пустой слот все время выглядит по разному в зависимости от происходящего на экране. Только при наведении мышки подсветка белым, слота, детектится всегда четко.
4. Zireael - 15 Марта, 2022 - 19:29:44 - перейти к сообщению
 Цитата:
Там фон полупрозрачный

Для этого в findimage есть параметр разбежность цвета. Подобрать можно во вкладке графика, фильтр динамики.
5. Kwaga - 15 Марта, 2022 - 20:53:36 - перейти к сообщению
 Zireael пишет:
 Цитата:
Там фон полупрозрачный

Для этого в findimage есть параметр разбежность цвета. Подобрать можно во вкладке графика, фильтр динамики.

Спасибо.
Я просто полагал что фильтр динамики для движущихся объектов.
Update.
Попробовал, очень долго ищет иногда даже Кибор зависает). В общем не добиться 100% детекта при разном заднем фоне(
(Добавление)
К тому же не понятно какой кусок вырезать и как искать, если например слот занят.
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
6. Kibor - 16 Марта, 2022 - 01:07:18 - перейти к сообщению
Пройтись в цикле по каждой ячейке такой функцией.

CODE:
pause(1000);
int r=70;


//593, 590 это координаты каждой ячейки в точке указанной на рисунке
if (scan_slot(593, 590)==1)messagebox ("Слот не пустой");
else messagebox ("Слот пустой");

function scan_slot(int стартx, int стартy)
{
int финишx=стартx+40, финишy=стартy+40;
if (sumcolor(-1, стартx, стартy, финишx, финишy, 4866368, r, r, r, r, r, r, -1)<1600) return 1;
else return 0;
}




Нажмите для увеличения
7. Kwaga - 16 Марта, 2022 - 03:50:39 - перейти к сообщению
 Kibor пишет:
Пройтись в цикле по каждой ячейке такой функцией.

CODE:
pause(1000);
int r=70;


//593, 590 это координаты каждой ячейки в точке указанной на рисунке
if (scan_slot(593, 590)==1)messagebox ("Слот не пустой");
else messagebox ("Слот пустой");

function scan_slot(int стартx, int стартy)
{
int финишx=стартx+40, финишy=стартy+40;
if (sumcolor(-1, стартx, стартy, финишx, финишy, 4866368, r, r, r, r, r, r, -1)<1600) return 1;
else return 0;
}




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


Спасибо за участие.
Я возможно не правильно описал проблему.
Проблема в том что предмет в слоте может быть любым, как и фон за ячейками, так как он прозрачный.
Я примерно понял как проверять каждую ячейку. Но как я и писал в первом посте, единственный вариант на 100% определить пустая она или нет - это навести на нее мышку, тогда она заливается белым цветом и scanpixel четко определяет это. Единственное моих знаний пока что не хватает, как мне пройдясь по каждой ячейки и определив количество свободных записать это в какую то переменную что бы потом ее использовать в loop.
8. Kibor - 16 Марта, 2022 - 03:59:06 - перейти к сообщению
 Kwaga пишет:
Проблема в том что предмет в слоте может быть любым, как и фон за ячейками, так как он прозрачный.

Это понятно.
Что бы понять какую ставить разбежность надо сделать 2 скрина. Один когда под ячейками самый светлый цвет фона. Второй самый темный. Тут стоит разбежность 70, что в принципе должно сработать на любом фоне и не пропустить какой то объект в ячейке.
А как обойти все ячейки? В цикле, подставляя координаты каждой ячейки в точке на скрине..

CODE:
//Таблица 5 на 3
int X[5]={100, 170, 240, 310, 380}//Координаты по x
int Y[3]={200, 270, 340}//Координаты по y

for (int x=0; x<5; x++)
{
for (int y=0; y<3; y++)
{
if (scan_slot(X[x], Y[y])==1)messagebox ("Слот не пустой");
else messagebox ("Слот пустой");
}
}
9. Kwaga - 16 Марта, 2022 - 04:01:34 - перейти к сообщению
 Kibor пишет:
 Kwaga пишет:
Проблема в том что предмет в слоте может быть любым, как и фон за ячейками, так как он прозрачный.

Это понятно.
Что бы понять какую ставить разбежность надо сделать 2 скрина. Один когда под ячейками самый светлый цвет фона. Второй самый темный. Тут стоит разбежность 70, что в принципе должно сработать на любом фоне и не пропустить какой то объект в ячейке.
А как обойти все ячейки? В цикле, подставляя координаты каждой ячейки в точке на скрине..

Про фон понял, буду пробовать. Единственное не понял количество какого цвета считать в sumcolor и как в итоге записать количество свободных слотов в переменную)
Простите за мою тупость, только постигаю все это)
И пока что понимаю только визуальный редактор.
10. Kibor - 16 Марта, 2022 - 04:04:00 - перейти к сообщению
Обойти в цикле
CODE:
//Таблица 5 на 3
int X[5]={100, 170, 240, 310, 380}//Координаты по x
int Y[3]={200, 270, 340}//Координаты по y

for (int x=0; x<5; x++)
{
for (int y=0; y<3; y++)
{
if (scan_slot(X[x], Y[y])==1)messagebox ("Слот не пустой");
else messagebox ("Слот пустой");
}
}

(Добавление)
 Kwaga пишет:
не понял количество какого цвета считать в sumcolor

Если сканируется прямоугольник 40 на 40, то там 1600 пикселей.
Почитайте про функцию sumcolor
(Добавление)
 Kwaga пишет:
И пока что понимаю только визуальный редактор.

Там тоже есть циклы и все что надо. Но понимать что тут написано надо для понятия алгоритма.

Powered by ExBB FM 1.0 Final