【问题标题】:Key differences between Core Image and GPUImageCore Image 和 GPUImage 之间的主要区别
【发布时间】:2023-03-14 23:07:01
【问题描述】:

Core Image 和 GPUImage 框架之间的主要区别是什么(除了 GPUImage 是开源的)?乍一看,它们的界面看起来非常相似......将一系列过滤器应用于输入以创建输出。我看到了一些小的差异,例如 GPUImage 具有的易于使用的 LookupFilter。我试图弄清楚为什么有人会选择一个而不是另一个作为照片过滤应用程序。

【问题讨论】:

  • 您是否阅读过 GPUImage 自述文件中的任何信息?这一切都在那里概述。
  • 谢谢.. 是否可以假设导出过滤后的视频也比 Core Image 更快?
  • GPUImage 不一定比 Core Image 快,反之亦然。有时是,有时不是。您应该看看哪个框架最适合您的需求。
  • @lxt 你能扩展一下吗?我最感兴趣的是性能。
  • Ivan,如果图像在 GPU 上,您可以期望在每像素图像处理方面有一些非常好的速度提升,因为 GPU 正是为此而设计的。创建 GPUImage 可能会失败,因为这些图像数据可能必须在内存中移动(复制),并且将结果图像返回到 CPU 内存也是如此。除此之外,您可以期待一些内存增加(但不是必需的)。通常,如果您对相当大的图像进行大量图像处理,则使用 GPU 将获得性能提升。

标签: ios objective-c gpuimage core-image


【解决方案1】:

作为 GPUImage 的作者,您可能想对我所说的持保留态度。我首先应该说我非常尊重 Core Image 团队以及他们如何继续更新框架。在编写 GPUImage 之前,我是 Core Image 的重度用户,我根据 Core Image 在 Mac 上的工作方式为其设计了许多设计元素。

这两个框架都在不断发展,因此今天进行的比较可能在几个月后就不再正确。我可以指出当前的功能和基准,但不能保证当我们中的任何一个更新时它们都不会翻转。

我使用 GPUImage 的理念是围绕使用着色器渲染的 OpenGL (ES) 四边形创建轻量级包装器,并使用尽可能简单的界面来实现。正如我之前所说,我引入了我真正喜欢的 Core Image 的各个方面,但我也更改了他们过去让我感到困惑的部分界面。我还扩展了一些东西,Core Image 只处理图像处理,而我挂钩电影播放、相机输入、视频录制和图像捕获。

当我最初提出这个想法时,Core Image 还没有进入 iOS。当我发布它时,Core Image 刚刚被添加到 iOS。但是,当时 iOS 上支持的过滤器数量was fairly limited(例如,没有模糊)和 iOS 上的 Core Image 不允许您像在 Mac 上那样创建自定义内核。

GPUImage 提供了在 iOS 上对图像和视频进行自定义 GPU 加速操作的方法,而 Core Image 没有。大多数开始使用它的人都是出于这个原因,因为他们有一些效果,他们无法使用股票 Core Image 滤镜。

最初,GPUImage 也是had significant performance advantages for many common operations。然而,Core Image 团队在每个 iOS 版本的处理速度上都取得了显着的进步,现在情况已经非常接近了。对于某些操作,GPUImage 更快,而对于其他操作,Core Image 更快。他们希望使用一些 pretty clever optimizations for things like blurs,我已经开始在我的 GPUImageiOSBlurFilter 之类的东西中复制它们。它们还智能地结合了多阶段操作,我将过滤步骤视为离散和独立的项目。在 iOS 上的某些情况下,这给了我一个优势,我最近尝试减少这种情况的内存后果,但他们比我更好地处理许多类型的过滤器链。

iOS 8 在 iOS 上的 Core Image 中引入了自定义内核支持,这在 Mac 上一直都有。这使得在 iOS 上的 Core Image 中编写您自己的自定义过滤器和其他操作成为可能,因此 GPUImage 将不再具有那么大的优势。当然,任何想要定位到旧 iOS 版本的人仍然会受到 Core Image 在那里可以做的事情的限制,GPUImage 可以定位回 iOS 4.0。

Core Image 也有一些简洁的功能,可以在 iOS 应用程序处于后台时进行过滤(起初基于 CPU,但 iOS 8 现在为此添加了 GPU 端支持),其中 GPUImage 依赖于当应用程序在后台时,OpenGL ES 会阻止它运行。在 iOS 8 中可能有解决此限制的方法,但我还没有完成所有文档。

我对 GPUImage 的兴趣在于机器视觉领域。图像过滤器很有趣,但我想使用这个框架来探索 GPU 加速图像分析的可能性。我正在研究任意对象识别和跟踪操作,这就是我将不断发展框架的方向。不过,你有 the code 到框架,所以你不必依赖我。

【讨论】:

    【解决方案2】:

    这是一个旧线程,但我认为值得注意的是 GPUImage 还具有一些 Core Image 中不存在的功能:特别是霍夫变换和几个边缘检测过滤器。

    Core Image 似乎都是关于应用滤镜和效果的——很高兴看到 GPUImage 在图像/视频分析方面进行了更多探索,有点像 openCV,但以更有效的方式。

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      相关资源
      最近更新 更多