iOS图像处理管道,与核心图像库相比,GPUImage仍然强大吗?

tom*_*234 5 iphone image-processing objective-c ios swift

我是iOS上新开发的图像处理应用程序,我在OpenCV上有很多经验,但在iOS甚至OSX上对我来说都是新的.

所以我发现主要是核心图像库和GPUImage库,用于正常的图像处理工作.我很想知道我应该选择哪一个作为iOS平台上的新手?我已经看到在iPhone 6上在iOS 6上进行了一些测试,看起来核心图像现在比GPUImage基准测试上的GPUImage更快.

我实际上是在寻找图像处理开发的完整解决方案,

  1. 什么语言 ?Swift,Objective-C或Clang和C++?
  2. 什么图书馆?GPUImage或Core Image或OpenCV或GEGL?
  3. 有一个示例应用程序?

我的目标是开发一些先进的色彩校正功能,我希望尽可能快地制作它,所以将来我可以使图像处理成为视频处理而没有太大问题.

谢谢

Bra*_*son 16

我是GPUImage的作者,所以你可以适当地权衡我的话.我在这里的答案中提供了关于这个框架与核心图像的设计思想的冗长描述,但我可以重申一下.

基本上,我设计了GPUImage作为OpenGL/OpenGL ES图像处理的方便包装.它是在iOS上没有Core Image的时候构建的,即使Core Image在那里推出,它也缺少定制内核并且有一些性能缺陷.

与此同时,Core Image团队在性能方面做得非常出色,导致Core Image现在在几个领域略微优于GPUImage.我仍然在其他人中击败他们,但它比过去更接近.

我认为决定取决于您对应用程序的重视程度.您可以使用GPUImage的完整源代码,因此您可以自定义或修复所需的任何部分.你可以看看幕后,看看任何操作是如何运行的.管道设计的灵活性让我可以尝试目前在Core Image中无法完成的复杂操作.

Core Image是iOS和OS X的标准配置.它被广泛使用(大量代码可用),高性能,易于设置,并且(从最新的iOS版本开始)可通过自定义内核进行扩展.除了GPU处理之外,它还可以执行CPU端处理,这使您可以在后台进程中处理图像(尽管您应该能够在iOS 8中在后台执行有限的OpenGL ES工作).在编写GPUImage之前,我一直使用Core Image.

对于示例应用程序,请下载GPUImage源代码并查看examples/目录.您可以找到适用于Mac和iOS的框架的各个方面的示例,以及Objective-C和Swift.我特别建议在iOS设备上构建和运行FilterShowcase示例,因为它演示了实时视频框架中的每个过滤器.尝试这是一件有趣的事情.

在语言选择方面,如果你在视频/图像处理方面表现出色,那么语言几乎没什么区别.您的性能瓶颈不是由语言造成的,而是GPU上的着色器性能以及从GPU上传/下载图像和视频的速度.

GPUImage是用Objective-C编写的,但即使是最老的iOS设备,它仍可以60 FPS处理视频帧.对代码进行概要分析发现,消息发送开销或内存分配(这种语言中与C或C++相比最慢的区域)甚至很明显.如果这些操作是在CPU上完成的,那么这将是一个略有不同的故事,但这都是由GPU驱动的.

使用最适合您的开发需求的语言.Core Image和GPUImage都兼容Swift,Objective-C++或Objective-C.OpenCV可能需要在Swift中使用垫片,但如果你在谈论性能,OpenCV可能不是一个很好的选择.它将比Core Image或GPUImage慢得多.

就个人而言,为了易于使用,可能很难与Swift争论,因为我可以在23行非空白代码中使用GPUImage编写整个视频过滤应用程序.