it-swarm.com.ru

Какова лучшая Java библиотека / подход к обработке изображений?

Я использую как JAI Media Apis, так и ImageMagick?

ImageMagick имеет некоторые проблемы с масштабируемостью, и JMagick на основе JNI также не привлекателен. JAI имеет плохое качество результатов при выполнении операций изменения размера по сравнению с ImageMagick.

Кто-нибудь знает какие-либо отличные инструменты с открытым исходным кодом или коммерческие, которые являются родными Java и ​​обеспечивают высокое качество результатов?

237
Daniel Honig

Там ImageJ , который может похвастаться

самая быстрая в мире чистая Java программа для обработки изображений

Его можно использовать как библиотеку в другом приложении. Его архитектура не блестящая, но она выполняет основные задачи по обработке изображений.

85
Ivan

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

imgscalr - библиотека изменения размера изображения на чистом Java (и простые операции, такие как заполнение, обрезка, вращение, осветление/затемнение и т. д.), которая чрезвычайно проста в использовании - один класс состоит из набора простой графики все операции определены как статические методы, которые вы передаете изображение и возвращаете результат.

Самый простой пример использования библиотеки будет выглядеть так:

BufferedImage thumbnail = Scalr.resize(image, 150);

А более типичное использование для создания миниатюр изображений с использованием нескольких качественных настроек и т. П. Может выглядеть следующим образом:

import static org.imgscalr.Scalr.*;

public static BufferedImage createThumbnail(BufferedImage img) {
    // Create quickly, then smooth and brighten it.
    img = resize(img, Method.SPEED, 125, OP_ANTIALIAS, OP_BRIGHTER);

    // Let's add a little border before we return result.
    return pad(img, 4);
}

Все операции по обработке изображений используют сырой конвейер Java2D (аппаратно ускоренный на основных платформах) и не создадут проблемы вызова через JNI, как конфликты библиотек в вашем коде.

imgscalr также был развернут в крупномасштабных производствах в нескольких местах - включение класса AsyncScalr делает его идеальным дополнением для любой обработки изображений на стороне сервера.

Существует множество настроек качества изображения, которые вы можете использовать для достижения компромисса между скоростью и качеством с наивысшим режимом ULTRA_QUALITY, обеспечивающим масштабированный результат, который выглядит лучше, чем реализация GIMP Lancoz3.

129
Riyad Kalla

Еще одна хорошая альтернатива: Марвин

30
Joseph

Я не Java парень, но OpenCV отлично подходит для моих нужд. Не уверен, подходит ли он тебе. Вот порт Java, я думаю: http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_Java/java_dev_intro.html

9
kenny

Обработка является новым, но очень, очень хорошим.

8
fmsf

Попробуйте использовать Catalano Framework .

Ключевые точки:

  • Архитектура как AForge.NET/Accord.NET.
  • Запустите в обеих средах с одинаковым кодом, на рабочем столе и Android.
  • Содержит несколько фильтров параллельно.
  • Разработка идет на полную Steam.

Платформа Catalano Framework - это среда для научных вычислений для Java и ​​Android. Проект начался как начальный порт для многих функций инфраструктур AForge.NET и Accord.NET для .NET, но неуклонно растет с появлением более продвинутых функций, которые теперь используются этими проектами.

Пример:

FastBitmap fb = new FastBitmap(bitmap);

Grayscale g = new Grayscale();
g.applyInPlace(fb);

Threshold t = new Threshold(120);
t.applyInPlace(fb);

bitmap = fb.toBitmap();

//Show the result
5
Diego Catalano

imo лучший подход - использовать GraphicsMagick Image Processing System с im4Java в качестве интерфейса командной строки для Java.

Есть много преимуществ GraphicsMagick, но один для всех:

  • GM используется для обработки миллиардов файлов на крупнейших фото-сайтах мира (например, Flickr и Etsy).
4
kajo

http://im4Java.sourceforge.net/ - если вы используете Linux, форкирование нового процесса не требует больших затрат.

3
Amanjit Gill

RoboRealm vision software список упоминает JHLabs и NeatVision среди множества других библиотек, не основанных на Java.

2
rics

Для коммерческих инструментов, вы можете попробовать Snowbound.

http://www.snowbound.com/

Мой опыт работы с ними несколько устарел, но я обнаружил, что их Java API обработки изображений намного проще в использовании, чем JAI, и намного быстрее.

Их поддержка клиентов и примеры кода тоже были очень хорошими.

2
Clayton

Я не могу сказать, что это "лучшая" библиотека, но я думаю, что вы можете попробовать это: http://algart.net/Java/AlgART/ Это открытый исходный код Java библиотека, поддерживающая обобщенные "умные" массивы и матрицы с элементами разного типа (от 1-битной до 64-битной с плавающей запятой), включая обработку 2D-, 3D- и многомерных изображений и другие алгоритмы, работающие с массивами и матрицами. К сожалению, в данный момент в нем недостаточно демонстраций и примеров, но, с другой стороны, в нем много JavaDocs. Он лежал в основе коммерческого программного обеспечения (SIMAGIS) в течение нескольких лет, но теперь он с открытым исходным кодом.

1
Daniel