在实时相机预览上应用自定义相机滤镜 - Swift

时间:2017-10-29 09:06:32

标签: swift camera avfoundation core-image arkit

我希望在Swift 3/4中制作原生iPhone iOS应用程序,该应用程序使用后置摄像头的实时预览,并允许用户应用内置相机应用程序中的过滤器。我的想法是通过调整Hue / RGB /亮度等级来创建我自己的滤镜。最后我想创建一个HUE滑块,允许用户在实时预览中过滤特定的颜色。

我遇到的类似问题的所有答案都已发布> 2年前,我甚至不确定他们是否向我提供了我正在寻找的相关的最新解决方案。

我不打算拍照,然后再使用过滤器。我正在寻找与原生相机应用程序相同的功能。在您看到相机预览时实时应用滤镜。

如何创建此功能?这可以使用AVFoundation实现吗? AVKit?是否可以使用ARKit实现此功能?

1 个答案:

答案 0 :(得分:3)

是的,您可以通过使用AVFoundation Capture系统捕获视频并使用您自己的渲染器处理和显示视频帧,将图像滤镜应用于相机Feed。

Apple有一个名为AVCamPhotoFilter的示例代码项目就是这样做的,并使用Metal或Core Image显示了该过程的多种方法。关键点是:

  1. 使用AVCaptureVideoDataOutput获取实时视频帧。
  2. 使用CVMetalTextureCacheCVPixelBufferPool来获取您喜欢的渲染技术可以访问的视频像素缓冲区。
  3. 使用Metal(或OpenGL或其他)使用Metal Shader或Core Image过滤器绘制纹理,以在渲染过程中对CPU进行像素处理。
  4. 顺便说一下,如果你想要做的就是将图像处理应用到相机输入,那么ARKit就太过分了。 ARKit适用于您想了解相机与真实世界空间的关系,主要用于绘制看似存在于现实世界中的3D内容。