Ios Core图像和GPUImage之间的关键区别

Ios Core图像和GPUImage之间的关键区别,ios,objective-c,gpuimage,core-image,Ios,Objective C,Gpuimage,Core Image,核心映像和GPUImage框架之间的主要区别是什么(除了GPUImage是开源的之外)?乍一看,他们的界面似乎非常相似。。。对输入应用一系列筛选器以创建输出。我看到了一些小的区别,比如GPUImage具有易于使用的LookupFilter。我试图弄明白为什么有人会选择一个而不是另一个作为照片过滤应用程序。作为GPUImage的作者,你可能想对我所说的持保留态度。首先,我要说的是,我非常尊重核心形象团队以及他们如何继续更新框架。在我写GPUImage之前,我是一个很重的核心映像用户,我根据核心映像

核心映像和GPUImage框架之间的主要区别是什么(除了GPUImage是开源的之外)?乍一看,他们的界面似乎非常相似。。。对输入应用一系列筛选器以创建输出。我看到了一些小的区别,比如GPUImage具有易于使用的LookupFilter。我试图弄明白为什么有人会选择一个而不是另一个作为照片过滤应用程序。

作为GPUImage的作者,你可能想对我所说的持保留态度。首先,我要说的是,我非常尊重核心形象团队以及他们如何继续更新框架。在我写GPUImage之前,我是一个很重的核心映像用户,我根据核心映像在Mac上的工作方式设计了它的许多设计元素

这两个框架都在不断发展,所以今天所做的比较可能在几个月后就不成立了。我可以指出当前的功能和基准,但不能保证当我们中的任何一方更新时,这些功能和基准不会发生变化

我使用GPUImage的理念是围绕使用着色器渲染的OpenGL(ES)四边形创建一个轻量级包装器,并使用尽可能简单的界面来实现。如前所述,我引入了我非常喜欢的核心映像的一些方面,但我也改变了它们界面中过去让我绊倒的部分。我还扩展了一些东西,因为核心图像只处理图像处理,而我则负责电影播放、相机输入、视频录制和图像捕获

当我开始考虑这个想法时,核心映像还没有出现在iOS上。在我发布它的时候,核心映像刚刚被添加到iOS中。然而,当时iOS上支持的过滤器数量(例如,没有模糊)和iOS上的内核映像不允许您像在Mac上那样创建自定义内核

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

最初,GPUImage也是。然而,Core Image团队在每个iOS版本的处理速度上都有了显著的提高,目前情况非常接近。对于某些操作,GPUImage更快,而对于其他操作,核心映像更快。他们希望使用一些,我已经开始在我的gpuimageios过滤器中复制。它们还智能地结合了多阶段操作,我将过滤步骤视为离散和单独的项。在某些情况下,在iOS上,这给了我一个优势,我最近试图减少这一点对内存的影响,但他们比我更好地处理许多类型的过滤器链

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

Core Image还具有一些简洁的功能,可以在iOS应用程序处于后台时进行过滤(起初基于CPU,但iOS 8现在增加了GPU端的支持),其中GPUImage依赖OpenGL ES阻止它在应用程序处于后台时运行。在iOS 8中可能有一些方法可以绕过这个限制,但我还没有阅读所有的文档


我对GPUImage的兴趣是机器视觉领域。图像过滤器是一个有趣的消遣,但我想用这个框架来探索GPU加速图像分析的可能性。我正在研究任意对象识别和跟踪操作,这是我将不断发展框架的方向。但是,您必须使用框架,因此您不必依赖我。

这是一个旧线程,但我认为值得注意的是,GPUImage还具有一些核心图像中不存在的功能:特别是hough变换和一些边缘检测过滤器


核心图像似乎都是关于应用过滤器和效果的——很高兴看到GPUImage在图像/视频分析方面做了更多的探索,有点像openCV,但效率更高

你读过GPUImage自述文件中的任何信息吗?这些都在这里列出了。谢谢。。导出过滤后的视频是否也比核心图像快?GPUImage不一定比核心图像快,反之亦然。有时是,有时不是。您应该看看哪个框架最适合您的需要。@lxt您可以在此基础上进行扩展吗?我最感兴趣的是性能。Ivan,如果图像在GPU上,你可以期望在每像素图像处理上有一些非常好的速度增益,因为GPU正是为此而设计的。创建GPUImage可能会失败,因为这些图像数据可能必须在内存中移动(复制),将结果图像返回CPU内存也是如此。除此之外,您可以期望一些内存增加(但不是必需的)。通常情况下,如果您在相当大的图像上进行一些繁重的图像处理,那么使用GPU将获得性能增益。