最快的C/C++图像大小调整库

The*_*own 18 c c++ resize image

我正在编写一个需要调整大量图像的应用程序......这些是我的要求:

  • C/C++
  • 至少支持jpeg/png
  • 快速
  • 跨平台

到目前为止,我的选择是:

  • OpenCV的
  • CIMG
  • ImageMagick的
  • GraphicsMagick(据说速度很快)
  • 魔鬼
  • 来自Boost的GIL
  • CxImage的
  • Imlib2(据说很快)
  • 还有其他人?

所有这些都可以完成工作,但我在这里寻找最快的,我无法找到他们的表现任何基准.

Sha*_*men 13

看看英特尔IPP(集成性能基元)(Wiki链接比英特尔链接更好...)它也适用于AMD,并具有调整图像大小(双线性,最近邻等)的功能,适用于Linux和Windows.

它不是免费的(但它不会破坏银行),但它是你能找到的最快的.

  • 想一想这个说法.在单个(复杂)步骤中执行此操作的哪一部分将使其更快?图像解码程序仍然需要解码每个像素,以便过滤器例程对它们进行过滤.即使他们是一个通行证的图书馆 - 我们对IPP例程的基准测试也表明IPP的2通道可能会更快. (2认同)

小智 9

看看VIPS.这是迄今为止我发现的最快的一个.


Leo*_*son 5

@Chris Becke 的评论:

“想一想那句话。在单个(复杂的)步骤中执行它的哪一部分会使其更快?图像解码例程仍然需要解码每个像素,以便过滤器例程过滤它们。 ”

情况并非总是如此。例如,在解码 JPEG 时,您可以要求 JPEG 库为您提供 1/2、1/4、1/8 大小的图像(或类似的图像;我已经有一段时间没有详细查看了)它可以由于 JPEG 的工作方式,因此根本无需解码额外的细节。它可以比完整的解码 + 缩放快得多。

(显然,如果较小的图像不是您想要的确切尺寸,您可能需要稍后缩放。)

(抱歉,由于没有声誉,我只能将此回复作为评论发布。我第一次尝试在此处发布任何内容。如果有人想重新发布此或类似评论并删除我的答案,请随意!)


tim*_*day 5

如果IPP能够满足你的需求(例如12节中的函数调整大小),那么我怀疑你会在其他任何地方找到更快的x86代码.请记住,当在AMD CPU上运行时,它可能会回落到较慢的"参考实现".

如果CPU不能满足您的性能要求,您可以考虑使用OpenGL将调整大小推进到GPU(使用纹理映射的最简单实现将受益于硬件插值器,对于更复杂的过滤使用GLSL着色器代码).GPU执行此类操作的速度比CPU快一百倍(给予或取零)的能力必须与进出卡的相对较慢的数据传输进行权衡(通常为每秒一千兆字节或两千兆字节)至多,最多).