Подтвердить что ты не робот

Самая быстрая библиотека изменения размера изображения на C/С++

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

  • C/С++
  • Поддержка jpeg/png как минимум
  • Fast
  • Cross-Platform

До сих пор мои варианты:

  • OpenCV
  • CImg
  • ImageMagick
  • GraphicsMagick (он сказал, что он быстрый)
  • DevIL
  • GIL из Boost
  • CxImage
  • Imlib2 (он говорит быстро)
  • Любые другие?

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

4b9b3361

Ответ 1

Взгляните на Intel IPP (интегрированные первичности производительности) (ссылка Wiki лучше, чем Intel...), она также работает на AMD и имеет функции для изменения размеров изображений (билинейного, ближайшего соседа и т.д.) И работает в Linux и Windows.

Это не бесплатно (но это не сломает банк), но это самое быстрое, что вы можете найти.

Ответ 2

Взгляните на VIPS. Это самый быстрый, который я нашел до сих пор.

Ответ 3

Если IPP делает то, что вам нужно ( например, функция Resize в разделе 12), то я сомневаюсь, что вы найдете значительно более быстрый x86-код в другом месте. Помните, что при запуске на процессорах AMD он может вернуться к более медленным "ссылочным реализациям".

Если процессор не соответствует вашим требованиям к производительности, вы можете подумать о том, чтобы направить изменение размера на графический процессор с использованием OpenGL (простейшая реализация с использованием сопоставления текстур выиграет от аппаратных интерполяторов, для более сложной фильтрации используется шейдерный код GLSL). Способность графического процессора делать такие вещи примерно в сто раз быстрее, чем процессор (давать или принимать нуль) должна быть сопоставлена ​​с относительно медленной передачей данных на карту и обратно (обычно это гигабайт или два в секунду максимум).

Ответ 4

@Крис Бекке:

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

Это не всегда так. Например, при декодировании JPEG вы можете попросить библиотеку JPEG дать вам изображение размером 1/2, 1/4, 1/8 (или что-то в этом роде, через некоторое время, так как я подробно рассмотрел), который он может без необходимости расшифровывать дополнительные детали вообще, из-за того, как работает JPEG. Это может быть намного быстрее, чем полная шкала декодирования +.

(Очевидно, вам может понадобиться масштабировать бит после этого, если меньшее изображение не соответствует точному размеру.)

(Извините, но я могу опубликовать этот комментарий только как комментарий из-за отсутствия репутата. В первый раз я попытался опубликовать что-нибудь здесь. Если кто-то захочет повторить это или что-то подобное комментарию и удалить мой ответ, не стесняйтесь! )

Ответ 5

Если вы ищете бесплатный материал и хотите быстро сделать что-то, попробуйте разработать плагин с компиляцией Gimp C: это очень просто, и я думаю, что Gimp отлично справляется с изменением размера:

Это может быть не самый быстрый размер, но самый дешевый (бесплатный) и самый быстрый для разработки.

Посмотрите там.

Ответ 6

Если вы ищете open source, как насчет FreeImage? Для коммерческих вещей я использую Snowbound. Оба они довольно быстр и способны к различным форматам изображений и алгоритмам изменения размера.