Core Image和GPUImage之间的主要区别

Iva*_*sko 23 objective-c core-image ios gpuimage

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

Bra*_*son 77

作为GPUImage的作者,你可能想要用一粒盐来说明我所说的话.我首先要说的是,我非常尊重Core Image团队以及他们如何继续更新框架.在我编写GPUImage之前,我是一个沉重的Core Image用户,我根据Core Image在Mac上的工作方式设计了许多设计元素.

这两个框架都在不断发展,因此今天的比较可能在几个月内不成立.我可以指出当前的功能和基准,但不能保证在我们任何一个人更新时都不会翻转.

我对GPUImage的理念是使用着色器创建一个围绕OpenGL(ES)四边形的轻量级包装器,并使用尽可能简单的接口来实现.正如我之前所说的那样,我提到了我非常喜欢的Core Image方面,但我也改变了过去曾让我绊倒过的部分界面.我还扩展了一些东西,因为Core Image只处理图像处理,而我则涉及电影播放,摄像机输入,视频录制和图像捕获.

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

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

最初,GPUImage 在许多常见操作中具有显着的性能优势.但是,Core Image团队在每个iOS版本的处理速度方面都取得了显着的进步,而且现在情况非常接近.对于某些操作,GPUImage更快,而对于其他操作,Core Image更快.他们希望对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加速图像分析的可能性.我正在从事任意对象识别和跟踪操作,这是我将不断发展框架的方向.但是,您拥有框架的代码,因此您不必依赖我.