powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск изображения в изображении???
16 сообщений из 16, страница 1 из 1
Поиск изображения в изображении???
    #38513736
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Подскажите как сделать поиск изображения в изображении. Есть два изображения: большое, и маленькое. На большом надо найти маленькое. Например: чтоб на робочем столе программа знала место расположения папок? Кто нибудь сталкивался с такой проблемой?
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38513742
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а что представляет из себя маленькое изображение? часть большого?
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38513750
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно быстро или полный перебор пойдёт? Одноразово по какому-то действию юзера, или массовый поиск в большом количестве изобрежений?
Вообще гугл по запросу find subimage position выдаёт массу интересного материала.
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38513752
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВообще гугл по запросу find subimage position выдаёт массу интересного материала.
А если к запросу добавить слово Java то даже рабочие примеры можно найти. Там, правда полное сканирование.
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38513763
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно в изображении монитора найти изображения размером 20х20 пикселей(примерно). Пробовал по цвету одного пикселя который есть в изображении которое мне нужно найти(плюс добавил немного оттенков), но много побочных результатов(то что мне не нужно).
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38513766
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andruxai, таких постановок не бывает. Огласи реальную задачу.
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38513775
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть два изображения:
1) изображение размером 20х20 пикселей которое находиться на жостком диске.
2) изображение которое я получаю с помощью метода createScreenCapture().
Во втором нужно найти первое.
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38513776
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После того как ты нашёл координаты иконки на скрине. Что будет дальше?
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38514039
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
я делал в свое время так:
- берем кусочек 20х20 экрана левый верхний угол
- берем искомое изображение 20х20
- считаем разницу по каждому цветовому каналу для каждого пикселя
- суммируем все эти разницы по модулю
- сдвигаемся на один пиксель на экране вправо
- опять берем кусочек 20х20
- повторяем до тех пор пока не пройдем всю "строку"
- сдвигаемся обратно к левому краю и вниз на один пиксель
- повторяем до тех пор пока не перебираем весь экран
- выбираем координаты с самой маленькой суммой разниц
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38514155
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если оба изображения в форматах без потерь качества, то и того проще
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38514312
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
От нашол код который мне нада но он очень медленный. Может ктото знает как можна его ускорить?
Код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
import java.awt.image.BufferedImage;


public class Motor {
	
				  
        int[] findSubimage(BufferedImage im1, BufferedImage im2){
        	   int w1 = im1.getWidth(); int h1 = im1.getHeight();
        	   int w2 = im2.getWidth(); int h2 = im2.getHeight();
        	   assert(w2 <= w1 && h2 <= h1);
        	   // will keep track of best position found
        	   int bestX = 0; int bestY = 0; double lowestDiff = Double.POSITIVE_INFINITY;
        	   // brute-force search through whole image (slow...)
        	   for(int x = 0;x < w1-w2;x++){
        	     for(int y = 0;y < h1-h2;y++){
        	       double comp = compareImages(im1.getSubimage(x,y,w2,h2),im2);
        	       if(comp < lowestDiff){
        	         bestX = x; bestY = y; lowestDiff = comp;
        	       }
        	     }
        	   }
        	   // output similarity measure from 0 to 1, with 0 being identical
        	   System.out.println(lowestDiff);
        	   System.out.println(bestX+" "+bestY);
        	   // return best location
        	   return new int[]{bestX,bestY};
        	   
        	 }

        	 
	
	/**
	 * Determines how different two identically sized regions are.
	 */
	private double compareImages(BufferedImage im1, BufferedImage im2) {
		assert(im1.getHeight() == im2.getHeight() && im1.getWidth() == im2.getWidth());
 	   double variation = 0.0;
 	   for(int x = 0;x < im1.getWidth();x++){
 	     for(int y = 0;y < im1.getHeight();y++){
 	        variation += compareARGB(im1.getRGB(x,y),im2.getRGB(x,y))/Math.sqrt(3);
 	     }
 	   }
 	   return variation/(im1.getWidth()*im1.getHeight());
		
	}
	/**
	 * Calculates the difference between two ARGB colours (BufferedImage.TYPE_INT_ARGB).
	 */
	private double compareARGB(int rgb1, int rgb2) {
		double r1 = ((rgb1 >> 16) & 0xFF)/255.0; double r2 = ((rgb2 >> 16) & 0xFF)/255.0;
 	   double g1 = ((rgb1 >> 8) & 0xFF)/255.0;  double g2 = ((rgb2 >> 8) & 0xFF)/255.0;
 	   double b1 = (rgb1 & 0xFF)/255.0;         double b2 = (rgb2 & 0xFF)/255.0;
 	   double a1 = ((rgb1 >> 24) & 0xFF)/255.0; double a2 = ((rgb2 >> 24) & 0xFF)/255.0;
 	   // if there is transparency, the alpha values will make difference smaller
 	   return a1*a2*Math.sqrt((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2));
	}

}
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38514318
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndruxaiМожет ктото знает как можна его ускорить?

В compareImages стоит добавить условие и вываливаться нафиг из метода, если очевидно что изображение не совпадает. Потому что сейчас всё равно сравнивается всё изображение, даже если после нескольких пикселей ясно что оно не совпадает.
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38514350
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andruxai,

Представьте, что прямоугольное изображение - это множество горизонтальных линий,
расположенных вертикально. Каждую линию - можно представить как строку (типа String ).
Каждый ARGB - как char ... Короче, думаю, что для Вашего случая можно модифицировать
один из алгоритмов поиска подстроки в строке.
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38514399
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczAndruxaiМожет ктото знает как можна его ускорить?

В compareImages стоит добавить условие и вываливаться нафиг из метода, если очевидно что изображение не совпадает. Потому что сейчас всё равно сравнивается всё изображение, даже если после нескольких пикселей ясно что оно не совпадает.

Чтото я своей тупой головой не могу понять какое условие нужно добавить. Добавил return 0 но оно всеровно долго думает. Подскажите как по вашему было б правельно.
Код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private double compareImages(BufferedImage im1, BufferedImage im2) {
		assert(im1.getHeight() == im2.getHeight() && im1.getWidth() == im2.getWidth());
 	   double variation = 0.0;
 	   for(int x = 0;x < im1.getWidth();x++){
 	     for(int y = 0;y < im1.getHeight();y++){
 	        variation += compareARGB(im1.getRGB(x,y),im2.getRGB(x,y))/Math.sqrt(3);
 	       
 	     }if(variation<0.03){return 0;}
 	   }
 	   return variation/(im1.getWidth()*im1.getHeight());
		
	}
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38514842
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andruxai, тебе наверное не нужен форум. Пиши лучше блог. Ты не слышишь задаваемых вопросов.
...
Рейтинг: 0 / 0
Поиск изображения в изображении???
    #38515148
programania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот программа R.java , которая нажимает на картинки на экране или клавиши.
Вызовите ee R.run("pi settings"); и она найдет картинку из файла <user.dir>settings.png
на экране методом findImage и нажмет ее как бы мышью.
По моим измерениям картинку в середине экрана 1920*1200 ищет за 0.006 секунд.

Кстати, кроме поиска картинок программу можно использовать для
выхода в нужную точку при отладке другой программы таким способом:
main(String[] args) {
R.run( ввод пароля; выбор в меню; нажатие кнопок; и т.д.);
Main class отлаживаемой программы.main(args);
}
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск изображения в изображении???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]