我是GPUImage的作者,因此你可能会更加重视我的话。我在
这里提供了对该框架与Core Image的设计思路进行详细描述,但我可以再次重申。
基本上,我设计GPUImage是为了方便地包装OpenGL / OpenGL ES图像处理。它建立在iOS上没有Core Image的时候,即使Core Image推出后,它也缺乏自定义内核,并且存在一些性能问题。
与此同时,Core Image团队在性能方面做出了令人印象深刻的工作,导致现在Core Image在几个领域略微优于GPUImage。我仍然在其他方面击败他们,但比以前要接近得多。
我认为决定取决于您为应用程序赋予的价值。整个GPUImage源代码都可供您使用,因此您可以自定义或修复任何部分。您可以查看任何操作运行的实际情况。管道设计中的灵活性让我尝试了目前无法在Core Image中完成的复杂操作。
Core Image是iOS和OS X的标配。它被广泛使用(有大量的代码可用),性能高,易于设置,并且(最新的iOS版本)可以通过自定义内核进行扩展。它可以进行CPU端处理,除了GPU加速处理外,还可以让您在后台处理图像(尽管在iOS 8中应该能够在后台进行有限的OpenGL ES工作)。我在编写GPUImage之前一直使用Core Image。
要获取示例应用程序,请下载GPUImage源代码并查看examples/
目录。您将找到框架的每个方面的示例,适用于Mac和iOS,以及Objective-C和Swift。我特别推荐在iOS设备上构建和运行FilterShowcase示例,因为它演示了每个滤镜从实时视频中得出的结果。这是一件有趣的事情。
关于语言选择,如果你追求视频/图像处理的性能,语言几乎不会有太大的影响。性能瓶颈将不是由于语言,而是由于GPU上的着色器性能以及图像和视频上传/下载速度造成的。
GPUImage用Objective-C编写,但它仍然可以在支持的最古老的iOS设备上以60 FPS处理视频帧。通过对代码进行分析,很少发现消息发送开销或内存分配(与C或C ++相比,这种语言中最慢的地方)是显著的。如果这些操作在CPU上执行,情况可能会有所不同,但这完全是由GPU驱动的。
使用最适合和最容易满足开发需求的语言。Core Image和GPUImage都与Swift、Objective-C++或Objective-C兼容。OpenCV可能需要从Swift中使用一个shim,但如果你考虑性能,OpenCV可能并不是一个很好的选择。它的速度要比Core Image或GPUImage慢得多。
个人而言,为了使用方便,使用Swift可能更加合适,因为我可以仅用23行非空白代码编写整个视频过滤应用程序。