Kibor |
Отправлено: 12 Октября, 2023 - 03:59:24
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
tyyty77 пишет: Искать последовательно каждую картинку из Категории№1 в выбранной зоне, если найдет значит это Категория№1, если нет соответственно Категория№2. Но думаю такой способ не будет быстрым в работе.
Достаточно быстрый. Но не достаточно надежный.
А если там вообще не будет никакой категории? От подумает что вторая.
Искать надо все.
Ищите и ту и ту. 2 цикл делайте.
Искать надо по заранее сделанному скриншоту.
По экрану будет долго, так как каждый раз будет делаться новый снимок.
Поиск 300 разных картинок 50 на 50 в зоне 70 на 70 занимает у меня 80 мс. Можно разбить на 2 цикла с поиском по 150 (разные категории)
CODE:/*
//Создаем 300 картинок для теста
int Image[300][50][50];
loadimage (#Image[0][0][0], "D:\Image_0.bmp");//Изображение 50 на 50
for (int n=0; n<300; n++)
{
saveimage(#Image[0][0][0], "D:\t\Image_"+format(n)+".bmp");//Копируем его 300 раз, для теста
}
*/
int Image[300][50][50];
for (int n=0; n<300; n++)
{
loadimage (#Image[n][0][0], "D:\t\Image_"+format(n)+".bmp");//Загружаем наши 300 картинок (Они должны быть разные. Это тест)
}
int PosX, PosY;
int ZonaX1=100, ZonaY1=500, ZonaX2=170, ZonaY2=570;
int SCREEN[70][70];
int time=gettime();
screen (#SCREEN[0][0], ZonaX1, ZonaY1, ZonaX2, ZonaY2, -1);//Делаем скрин зоны в которой ищем. 70 на 70
for (n=0; n<300; n++)
{
findimage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);
}
messagebox (gettime()-time);
Поиск 300 разных картинок 50 на 50, с разбежностью цвета 20, в зоне 70 на 70 занимает у меня 150 мс. При условие включения быстрого поиска -(для просмотра ссылки Вам необходимо авторизоваться) CODE:/*
//Создаем 300 картинок для теста
int Image[300][50][50];
loadimage (#Image[0][0][0], "D:\Image_0.bmp");//Изображение 50 на 50
for (int n=0; n<300; n++)
{
saveimage(#Image[0][0][0], "D:\t\Image_"+format(n)+".bmp");//Копируем его 300 раз
}
*/
int Image[300][50][50];
for (int n=0; n<300; n++)
{
loadimage (#Image[n][0][0], "D:\t\Image_"+format(n)+".bmp");
}
int PosX, PosY;
int ZonaX1=100, ZonaY1=500, ZonaX2=170, ZonaY2=570;
int SCREEN[70][70];
int r=20;
int p=100;
int time=gettime();
screen (#SCREEN[0][0], ZonaX1, ZonaY1, ZonaX2, ZonaY2, -1);//Делаем скрин зоны в которой ищем. 70 на 70
for (n=0; n<300; n++)
{
findimage (SWIFT, 1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, r, r, r, r, r, r, p, 1, #SCREEN[0][0]);
}
messagebox (gettime()-time);
Поиск 300 разных картинок 50 на 50 в зоне 600 на 300 занимает у меня 400 мс
Это уже не просто сравнение, а поиск координат в большой зоне.
CODE:/*
//Создаем 300 картинок для теста
int Image[300][50][50];
loadimage (#Image[0][0][0], "D:\Image_0.bmp");//Изображение 50 на 50
for (int n=0; n<300; n++)
{
saveimage(#Image[0][0][0], "D:\t\Image_"+format(n)+".bmp");//Копируем его 300 раз, для теста
}
*/
int Image[300][50][50];
for (int n=0; n<300; n++)
{
loadimage (#Image[n][0][0], "D:\t\Image_"+format(n)+".bmp");//Загружаем наши 300 картинок (Они должны быть разные. Это тест)
}
int PosX, PosY;
int ZonaX1=100, ZonaY1=200, ZonaX2=700, ZonaY2=500;
int SCREEN[600][300];
int time=gettime();
screen (#SCREEN[0][0], ZonaX1, ZonaY1, ZonaX2, ZonaY2, -1);//Делаем скрин зоны в которой ищем. 600 на 300
for (n=0; n<300; n++)
{
findimage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);
}
messagebox (gettime()-time);
|
|
|
GreatProgram |
Отправлено: 17 Ноября, 2023 - 18:31:26
|
Участник
Покинул форум
Сообщений всего: 61
Дата рег-ции: Сент. 2022
Репутация: 2
|
Здравствуйте! Работаю в визуальном редакторе,
будет ли конфликт в работе когда это дело скомпилируется в Киборе?
Я о функциях Findimage, loadimage, screen и т.д.
(Честно мне самому кажется этот вопрос глупым, и я знаю ответ,
но мне хочется быть уверенным, что конфликта не будет...
Так же вводит в ступор количество параметров в Findimage, например в киборе это может
выглядеть так:
CODE:findImage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);
а при анализе в Киборе, то что сгенерировал визуальный редактор:
CODE:FindImage(1, #Screen[0][0], #W_Kib, W_Kib.leftclient, W_Kib.topclient, #Image0[0][0], 1, 0, 0, 0, #K_Kib, #X_Kib[0], #Y_Kib[0], 0, 0, eX_Kib, eY_Kib, 0, 0, -1, 0, 100, 0, 0, "0, 0, 0, 0", 0, "Бездействие", 0, 0, 0, 0, 5, 5, 0, 0);
А далее следует объявление function FindImage(с огромным количеством параметров){и телом...}
В общем это и вызывает в первую очередь недопонимание, что будет если я буду писать в визуальном редакторе в блоке кода код на поиск изображений, так же хотелось бы каждому изображению присвоить свою переменную для идентификации (найдено/не найдено)
Подскажите пожалуйста... |
|
|
Kibor |
Отправлено: 18 Ноября, 2023 - 14:58:19
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
GreatProgram пишет: Как проверить четное число или нет? Не нашел тут оператор % да и булевых тоже нету
и не надо они кликеру.
CODE:messagebox (ch(8));
function ch(double a)
{
int b=a/2;
if (a==b*2) return 1;
return 0;
} |
|
|
GreatProgram |
Отправлено: 19 Ноября, 2023 - 12:35:44
|
Участник
Покинул форум
Сообщений всего: 61
Дата рег-ции: Сент. 2022
Репутация: 2
|
findimage (SWIFT, 1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, r, r, r, r, r, r, p, 1, #SCREEN[0][0]);
Подскажите пожалуйста, что принимает этот параметр (Выделил красным)? И какие значения он может иметь.
Еще хотел узнать, если у меня не используются переменные PosX PosY. То что вместо них можно поставить может быть этот параметр имеет ключ какой либо, что бы не использовать их?(Отредактировано автором: 19 Ноября, 2023 - 12:43:28) |
|
|
|