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

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

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

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

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

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

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

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

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

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

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

@Chris Becke的评论:

“想一下这个陈述。在一个(复杂的)步骤中做什么部分会让它变得更快?图像解码程序仍然需要解码每个像素,以便过滤程序过滤它们。 “

情况并非总是如此。 例如,当解码JPEG时,你可以要求JPEG库给你一个1 / 2,1 / 4,1 / 8大小的图像(或类似的东西;它已经有一段时间了,因为我仔细查看)它可以由于JPEG的工作方式,所以无需解码额外的细节。 它可以比完全解码+规模快得多。

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

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

如果你正在寻找免费的东西,并希望快速做事,尝试开发一个Gimp C编译的插件:这很容易,我认为Gimp在resize方面做得很好:

这可能不是resize最快,但最便宜(免费)和最快的开发

看看那里 。

如果您正在寻找开源,FreeImage怎么样? 对于商业用途,我使用Snowbound。 两者都非常快,能够使用许多不同的图像格式和resize算法。