Core Image和GPUImage框架之间的主要区别是什么(除了GPUImage是开源的)?一目了然,它们的界面看起来非常相似......将一系列过滤器应用于输入以创建输出。我看到一些小的差异,比如GPUImage所具有的易于使用的LookupFilter。我试图找出为什么有人会选择一个而不是另一个用于照片过滤应用程序。
答案 0 :(得分:76)
作为GPUImage的作者,你可能想要用一粒盐说话。我首先要说的是,我非常尊重Core Image团队以及他们如何继续更新框架。在编写GPUImage之前,我是一个沉重的Core Image用户,我根据Core Image在Mac上的工作方式设计了许多设计元素。
这两个框架都在不断发展,因此今天进行的比较可能在几个月内不成立。我可以指出当前的功能和基准,但不能保证在我们任何一个人更新时都不会翻转。
我对GPUImage的理念是创建一个围绕使用着色器渲染的OpenGL(ES)四边形的轻量级包装器,并使用尽可能简单的接口来实现。正如我之前所说的那样,我提到了我非常喜欢的核心图像方面,但我也改变了过去曾让我绊倒过的部分界面。我还扩展了一些东西,因为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,因此您不必依赖我。
答案 1 :(得分:2)
这是一个老线程,但我认为值得注意的是GPUImage还具有Core Image中不存在的一些功能:特别是霍夫变换和几个边缘检测过滤器。
核心图像似乎都是关于应用滤镜和效果的 - 而且很高兴看到GPUImage在图像/视频分析上探索更多,有点变得更像openCV,但是更有效。