Добрый день, уважаемые господа ботописцы.
Вопрос такой.
Есть поле в игре 3 в ряд. Размер поля - 400*400 пикселей.
поле состоит из 64 "квадратов". Каждый 50*50 пикселей соответственно.
В каждом квадрате естественно есть "фигуры". Всего типов фигур которые и надо собирать 3 в ряд - 8.
Сначала делается скриншот поля в переменную screen[400][400].
Потом перед тем, как сделать ход, программа сканирует поле на предмет каждого типа фишки и записывает числовые значения 0-8 (соответствуют типу фигуры) в массив. Далее я уже работаю с цифрами (ищу ходы и т.д.).
Так вот самое долгое в выполнении самое долгое занимает именно сканирование поля.
***
Выглядит это примерно так, если кому-то нужно:
for (int n=0; n<8; n++)//перебор фишек
{o=findimage(-1, #fishki[n][0][0], 0, #Xf[0], #Yf[0], 0, 0, 378, 378, r1, r1, r1, r1, r1, r1, p1, 1, #screen_game[0][0]);
for (int a=0; a<o; a++)// <8
{
for (int nx=0; nx<8; nx++)
{
for (int ny=0; ny<8; ny++)
{
if (Xk[nx][ny]-(Xf[a]+137)<podgon_screen && (Xf[a]+137)-Xk[nx][ny]<podgon_screen && Yk[nx][ny]-(Yf[a]+87)<podgon_screen && (Yf[a]+87)-Yk[nx][ny]<podgon_screen) //сравнение фишек, не заморачивайся
{
Nk[nx][ny]=n; //записываем фишку типа n в массив который хранит координаты фишек
goto df;
}
}
}
df:;
}
}
***
Получается я беру скрин окна 400*400 потом ищут количество фигур в скрине и записываю координаты в массив. и так для каждой фигуры.
Выполнение чисто сканирования занимает секунд 5 чистого времени, что довольно долго.
Ускорить процесс пробовал заменив поиск фигур на поле, сканированиеv пикселей на местах расположения фигур, но результат почему-то такой же по времени.
Может кто-нибудь подскажет нубу , какое-то очевидное решение по оптимизации?
p.s. Уменьшить размер экрана к сожалению нет возможности, как и размер скрина, на котором ищутся фишки.
1. 1991dima - 21 Июня, 2018 - 04:15:53 - перейти к сообщению
2. Kibor - 21 Июня, 2018 - 05:18:27 - перейти к сообщению
Подобрать правильные параметры поиска по не полному совпадению.
Подобрать правильные рисунки. Сделать их как можно меньше.
Когда делается рисунок шаблона, следить что бы левый верхний угол рисунка имел по возможности уникальные цвета пикселей.
5 секунд это много и говорит о том что сделано что то не верно.
Подобрать правильные рисунки. Сделать их как можно меньше.
Когда делается рисунок шаблона, следить что бы левый верхний угол рисунка имел по возможности уникальные цвета пикселей.
5 секунд это много и говорит о том что сделано что то не верно.
3. 1991dima - 21 Июня, 2018 - 05:55:34 - перейти к сообщению
Kibor пишет:
Подобрать правильные параметры поиска по не полному совпадению.
Подобрать правильные рисунки. Сделать их как можно меньше.
Когда делается рисунок шаблона, следить что бы левый верхний угол рисунка имел по возможности уникальные цвета пикселей.
5 секунд это много и говорит о том что сделано что то не верно.
Подобрать правильные рисунки. Сделать их как можно меньше.
Когда делается рисунок шаблона, следить что бы левый верхний угол рисунка имел по возможности уникальные цвета пикселей.
5 секунд это много и говорит о том что сделано что то не верно.
на данный момент изображение каждой фигуры, которую я ищу имеет размер 25*25 пикселей. То есть я 8 раз ищу координаты изображений размером 25*25 в скрине размером 400*400.
Правильно я понимаю, что мне нужно уменьшить размеры изображений, которые я ищу? Если да, то желательно до каких? 5*5?
4. Kibor - 21 Июня, 2018 - 06:00:35 - перейти к сообщению
Я дал рекомендации.
5 сек это долго.
Ничего более сказать не могу не видя что и как там.
5 сек это долго.
Ничего более сказать не могу не видя что и как там.
5. 1991dima - 21 Июня, 2018 - 07:44:29 - перейти к сообщению
Kibor пишет:
Я дал рекомендации.
5 сек это долго.
Ничего более сказать не могу не видя что и как там.
5 сек это долго.
Ничего более сказать не могу не видя что и как там.
А в теории что будет быстрее, применить функцию findimage на изображение размером 400х400 и так для каждого типа искомых объектов и получить соответственно 64 места их расположения
или самому указать 64 маленьких мест расположения размером 50х50 и в каждом из них применить функцию findimage?
6. Kibor - 21 Июня, 2018 - 07:54:07 - перейти к сообщению
Так как у вас. Сделать один раз снимок и искать в этом скриншоте
7. 1991dima - 26 Июня, 2018 - 06:36:32 - перейти к сообщению
Kibor пишет:
Так как у вас. Сделать один раз снимок и искать в этом скриншоте
Спасибо за совет. Действительно, уменьшил размер искомых картинок до 5*5 (пришлось повозиться с настройкой findimage) зато теперь поиск занимает секунды полторы.