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

3
我想用Swift 3/4制作一个原生的iPhone iOS应用程序,利用后置摄像头的实时预览,并允许用户应用过滤器,就像内置相机应用程序一样。我的想法是通过调整色相/ RGB /亮度等级来创建自己的过滤器。最终,我想创建一个HUE滑块,允许用户在实时预览中过滤特定颜色。
所有我遇到的类似问题的答案都是发布在两年前以上的,而且我不确定它们是否提供我正在寻找的相关、最新的解决方案。
我不是要拍照然后再应用过滤器,我要的是与本地相机应用程序相同的功能。在看到相机预览时实时应用过滤器。
如何创建这个功能?可以使用AVFoundation吗?AVKit?也许ARKit可以实现这个功能?

在AVFoundation中,您是否尝试使用AVCaptureVideoDataOutputSampleBufferDelegate拦截输出缓冲区,然后使用CIImage类?我自己还没有尝试过,但这是我开始的地方。这可能会有所帮助 https://dev59.com/JlwY5IYBdhLWcg3wpJL_ - adamfowlerphoto
@Spads 感谢您的评论。事实上,我正处于遵循同样示例的过程中^。我已经使用AVFoundation创建了一个应用程序来显示后置摄像头输出,接下来将看看如何应用滤镜,但我不确定效率如何。 - nopassport1
@Boris:你最终是怎么做到的?你采用了什么方法? - iOS_Passion
1个回答

4

是的,你可以通过使用AVFoundation捕获系统来捕获视频并使用自己的渲染器处理和显示视频帧来对相机输入应用图像滤镜。

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

  1. 使用AVCaptureVideoDataOutput获取实时视频帧。
  2. 使用CVMetalTextureCacheCVPixelBufferPool获取视频像素缓冲区,以便让您喜欢的渲染技术可以访问。
  3. 在渲染过程中使用Metal(或OpenGL或其他)的Metal着色器或Core Image滤镜绘制纹理以在CPU上进行像素处理。

顺便说一句,如果您只想对相机输入应用图像处理,则ARKit太过浪费。 ARKit是为了当您想要知道相机与现实世界空间的关系时使用,主要用于像绘制出似乎存在于真实世界中的3D内容之类的目的。


你有没有做这件事情的例子? - iOS_Passion
是的 - 就是答案中链接的苹果示例代码 AVCamPhotoFilter。 - rickster
谢谢。我会查看AVCamPhotoFilter。实际上,我想要实现类似于这个链接的内容:https://stackoverflow.com/questions/52231662/change-color-of-real-time-object-in-live-camera-feed-in-iphone。如果你有任何建议,我会非常感激。 - iOS_Passion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接