我正在尝试编写一个 iPhone 应用程序,它将进行一些实时相机图像处理。我使用 AVFoundation 文档中提供的示例作为起点:设置捕获 session ,从示例缓冲区数据制作 UIImage,然后通过 -setNeedsDisplay
在某个点绘制图像,我调用主线程。
这可行,但速度相当慢(每帧 50 毫秒,在 -drawRect:
调用之间测量,对于 192 x 144 预设)我在 App Store 上看到了可以运行的应用程序比这还快。
我大约一半的时间花在 -setNeedsDisplay
上。
如何加快图像处理速度?
最佳答案
正如史蒂夫指出的,在我的回答中 here我鼓励人们在处理和渲染来自 iPhone 摄像头的图像到屏幕时,看看 OpenGL ES 以获得最佳性能。这样做的原因是使用 Quartz 将 UIImage 不断更新到屏幕上是一种将原始像素数据发送到显示器的相当慢的方法。
如果可能,我鼓励您使用 OpenGL ES 进行实际处理,因为 GPU 非常适合此类工作。如果您需要保持 OpenGL ES 1.1 兼容性,您的处理选项将比使用 2.0 的可编程着色器更加有限,但您仍然可以进行一些基本的图像调整。
即使您使用 CPU 上的原始数据进行所有图像处理,您仍然可以通过对图像数据使用 OpenGL ES 纹理并在每一帧更新它来获得更好的效果。只需切换到该渲染路线,您就会看到性能的飞跃。
(更新:2012 年 2 月 18 日)正如我在对上述链接答案的更新中所描述的那样,我使用我的新开源 GPUImage 使这个过程变得更加容易。框架。这会为您处理所有 OpenGL ES 交互,因此您可以只专注于在传入视频上应用您想要的滤镜和其他效果。它比使用受 CPU 限制的例程和手动显示更新执行此处理快 5-70 倍。
关于iphone - 如何从 iPhone 相机进行快速图像处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248497/