2014-12-16 4 views
-4

Я пытаюсь отфильтровать разницу между двумя изображениями (скриншоты). К сожалению, у меня нет абсолютно никакого опыта в Java и изображениях, и у меня нет реального понятия, что искать.Разница фильтров между 2 изображениями?

Есть ли готовые к использованию классы для этого?

Что я ожидал что-то вроде:

Image imgA = new (pathToA); // Image with for instance 500kb 
Image imgB = new (pathToB); // Image with for instance 500kb 
Image imgC = ImageFilter.filterDifference(imgA, imgB); // Only the difference between imgA and imgB and therefore for instance 20kb 

Edit:

Примера: Во всяком случае, то, что я имею в виду разницы визуально разница между образами (скриншоты). Если у меня есть один скриншот с 5 значками в папке, а затем сделайте еще один снимок экрана с 1 значком больше, тогда я хочу, чтобы imgC отображал только этот новый значок.

Edit 2:

Разъяснение: Я хочу только разницу между 2 Скриншоты в новом образе.

Edit 3:

Какой-то код, который будет выглядеть как этот (код не работает):

private BufferedImage getImageDifference(BufferedImage img1, BufferedImage img2) { 
    if (img1.getWidth() == img2.getWidth() && img1.getHeight() == img2.getHeight()) { 
     BufferedImage img3 = new BufferedImage(img1.getHeight(), img1.getWidth(), img1.getType()); 
     for (int x = 0; x < img1.getWidth(); x++) { 
      for (int y = 0; y < img1.getHeight(); y++) { 
       if (img1.getRGB(x, y) != img2.getRGB(x, y)) 
        //return false; 
        img3.setRGB(x, y, img2.getRGB(x, y)); 
      } 
      return img3; 
     } 
    } else { 
     return false; 
    } 
} 
+0

какая разница? –

+0

Почему это понижение -1? Это абсолютно законный вопрос! Невозможно спросить лучше, когда нет прежних знаний! Во всяком случае, я имею в виду различие - визуальная разница между изображениями (скриншотами). Если у меня есть один скриншот с 5 значками в папке, а затем сделайте еще один снимок экрана с 1 значком больше, тогда я хочу, чтобы imgC отображал только этот новый значок. –

+0

Почему новый значок; почему бы не белые пиксели в том месте, где значок находится на другом скриншоте? (это также «разница»). Вы когда-нибудь видели алгоритм, который мог бы это сделать? –

ответ

1

Поскольку вы заинтересованы в скриншотах вы можете ожидать, что разница изображения будет минимальным. Это обычно верно для небольших интервалов времени, но это очень неопределенно для большего. Представьте себе свой рабочий стол при использовании определенного приложения и через несколько секунд, продолжая использовать одно и то же приложение, а с другой - случай, когда вы используете другое приложение. Эти части объясняют, что я предполагаю размеры файлов, которые вы предоставляете для своих изображений. Для этого разностное изображение можно сохранить в формате оттенков серого.

Я не знаю, есть ли для этого готовая библиотека. Я хотел бы предложить это (простой) подход в качестве точки кика:

  1. просто вычесть два изображения и
  2. порога вашего разностного изображение:
  3. а) держать только различия выше определенного значения.
  4. b) сохранить только те области, у которых есть определенное количество соседних пикселей, отличающихся друг от друга (это могло бы исключить какой-либо изолированный пиксель, вероятно, из-за шума)
  5. Вы можете обработать ваше разное изображение в зависимости от ваших потребностей.

Не явное конкретное решение, я думаю. Если у вас нет никакой идеи, вы можете начать читать о BufferedImage например

 Смежные вопросы

  • Нет связанных вопросов^_^