现在苹果已经将核心图像框架移植到iOS 5.0,我想知道:Core Image是否足够快速地应用实时滤镜和效果于相机视频中?
此外,有没有一个好的学习iOS 5.0的核心图像框架的起点?
现在苹果已经将核心图像框架移植到iOS 5.0,我想知道:Core Image是否足够快速地应用实时滤镜和效果于相机视频中?
此外,有没有一个好的学习iOS 5.0的核心图像框架的起点?
如今Core Image已经在iOS上发布了一段时间,我们可以谈谈一些具体的性能数据。我创建了一个基准应用程序,作为对我的GPUImage框架进行测试,并分析了使用原始CPU滤镜、Core Image滤镜和GPUImage滤镜处理实时视频流时的性能。以下是每个操作单个gamma滤镜用于对来自iPhone相机的640x480视频帧进行处理所需的时间(以毫秒为单位),针对两种不同硬件��号运行两个不同操作系统版本:
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)
这些基准测试的来源可以在我的GitHub存储库中找到,如果您想了解我从哪里得到这些数字。
我从原来的答案中更新了这个答案,因为原先对Core Image的性能评价太严厉了。我用作比较标准的棕褐色调滤镜没有执行与我的滤镜相同的操作,所以那是一个糟糕的基准。Core Image滤镜的性能也在iOS 6中显着提高,这有助于使它们的处理速度足够快,可以在iPhone 4S及以上设备上实时处理视频。此外,我后来发现几种情况,比如大半径模糊,在这些情况下,Core Image明显优于我的GPUImage框架。
原先的答案,供参考:
与任何性能相关的问题一样,答案将取决于您的滤镜的复杂性、正在过滤的图像大小以及您运行的设备的性能特征。
由于Core Image在Mac上已经可用了一段时间,我可以向您介绍Core Image编程指南作为学习该框架的资源。鉴于保密协议的限制,我无法评论iOS特定的元素,但是我强烈建议观看WWDC 2011会议422 - 在iOS和Mac OS X上使用Core Image的视频。
核心图像(大部分)使用GPU进行图像处理,因此您可以查看现有设备上OpenGL ES 2.0着色器处理图像的速度。我最近在这个领域做了一些工作,发现iPhone 4能够在实时输入480 x 320的视频并使用简单着色器进行60 FPS处理。您可以下载我的示例应用程序,并尝试自定义着色器和/或视频输入大小,以确定您的特定设备是否能以良好的帧率处理此处理。Core Image可能会增加一些开销,但它也具有一些巧妙的优化方式来组织滤镜链。
最慢的兼容设备是iPhone 3G S和第三代iPod touch,但它们与iPhone 4相比并没有那么慢。iPad 2则以其巨大的片段处理能力远超它们所有其他设备。
_CIglContext = [CIContext contextWithEAGLContext:_glContext options:opts]
;iPhone 4及以上的版本将实现几乎实时的操作。iPhone 3GS会有些卡顿。不建议在iPhone 3及更早版本上使用。