iOS 5.0中的核心图像filter是否足够快实时video处理?

现在,苹果已经将Core Image框架移植到了iOS 5.0,我想知道:Core Image是否足够快,可以将实时滤镜和效果应用于相机video?

另外,学习iOS 5.0的Core Image框架有什么好的起点?

现在Core Image已经在iOS上出现了一段时间了,我们可以谈一些硬性能的数字。 我创build了一个基准testing应用程序,作为我的GPUImage框架testing的一部分,并使用实时video源分析基于原始CPU的filter,核心图像filter和GPUImagefilter的性能。 以下是从iPhone摄像头(对于运行两个不同操作系统版本的两种不同硬件型号)在640x480video帧上应用单伽马滤镜所需的时间(以毫秒为单位):

iPhone 4 (iOS 5) | iPhone 4S (iOS 6) ------------------------------------------------ CPU 458 ms (2.2 FPS) 183 ms (5.5 FPS) Core Image 106 ms (6.7 FPS) 8.2 ms (122 FPS) GPUImage 2.5 ms (400 FPS) 1.8 ms (555 FPS) 

对于Core Image来说,iPhone 4上的简单伽马filter的转换速度最高可达9.4 FPS,但在iPhone 4S上的转换速度却超过60 FPS。 这是关于你可以设置的最简单的核心图像filter的情况,所以性能肯定会随着更复杂的操作而变化。 这似乎表明,Core Image无法做足够快的实时处理以匹配运行iOS 5的iPhone 4的iPhone摄像头速度,但是从iOS 6开始,它处理video的速度足够快,可以在iPhone 4S及更高版本上进行实时过滤。

这些基准的来源可以在我的GitHub存储库中find),如果你想看看我从哪里得到这些数字。

我已经从我的原始更新了这个答案,这对Core Image的性能太关键了。 我用来作为比较基础的棕褐色调滤镜并没有像我自己那样进行相同的操作,所以这是一个糟糕的基准。 在iOS 6中,Core Imagefilter的性能也得到了显着改善,这使得它们足够快,可以在iPhone 4S上处理实时video。 此外,我还发现了几个例子, 比如大型半径模糊 ,其中核心图像显着优于我的GPUImage框架。

以前的答案,为后人:

与任何与性能相关的问题一样,答案将取决于您的filter的复杂性,被过滤的图像大小以及您所运行的设备的性能特征。

因为Core Image在Mac上已经有一段时间了,所以我可以把你指向Core Image Programming Guide作为学习框架的资源。 考虑到NDA,我不能评论iOS特定的元素,但我强烈build议观看WWDC 2011 Session 422 – 在iOS和Mac OS X上使用核心映像的video。

核心图像(主要)使用GPU进行image processing,所以您可以查看OpenGL ES 2.0着色器在现有设备上处理image processing的速度。 我最近在这个领域做了一些工作 ,发现iPhone 4可以使用一个简单的着色器,以480 x 320的速度input实时video,进行60 FPS处理。您可以在那里下载我的示例应用程序,并尝试定制着色器, /或videoinput大小,以确定您的特定设备是否可以以相当的帧率处理此处理。 核心图像可能会增加一些开销,但它也有一些巧妙的优化组织filter链。

最慢的兼容设备将是iPhone 3G S和第三代iPod touch,但是它们的速度并不比iPhone 4慢。iPad 2以其巨大的碎片处理能力将它们全部吹走。

恕我直言,核心图像始终是你的第一个select自iOS6.0以来。 有一些你会喜欢的function,比如:

  1. 核心图像input参数支持glTexture2d;
  2. 核心图像输出参数支持glTexture2d;
  3. 您可以select独家使用CI; 初始化一个CIContext例如。 _CIglContext = [CIContext contextWithEAGLContext:_glContext options:opts] ;
  4. 现在有很多filter可以用于iOS平台,还有93个filter呢?
  5. 当您的应用程序暂时在后台运行时,您可以select使用CPU独占处理缓冲区,但不build议这样做。

这些都是WWDC2012会议video中提到的Core Image部分。 看看,也许你会在那里find你的解决scheme。

这几乎是实时在iPhone 4和前锋。 iPhone 3GS会有点波动。 iPhone 3之前,不build议。