获取AVCaptureSession或AVCaptureVideoPreviewLayer

时间:2017-05-28 02:10:33

标签: swift pixel avcapturesession

在我的应用程序设计中,我希望将实时摄像机输入周围的帧更改为实时摄像机中间像素的精确颜色。出于我的应用程序的目的,这很重要,而不仅仅是一个简单的配色方案。

我的代码遍历UIImage甚至UIView的字节,并找到特定坐标的像素颜色。但是,这似乎不适用于AVCaptureSession或AVCaptureVideoPreviewLayer。

我所拥有的最佳解决方法是在后台运行一个队列,每0.1秒基本上在屏幕外绘制一个已保存的图像并找到像素颜色。我知道这不是最好的方法!并且想知道是否有人能指出我有用的资源。

1 个答案:

答案 0 :(得分:0)

您可以尝试从AVFoundation获取相机帧并分析帧图像缓冲区以了解颜色。

假设您已经设置了AVCaptureVideoDataOutput,那么您只需使用下面的AVCaptureVideoDataOutputSampleBufferDelegate方法来获取相机帧。

optional func captureOutput(_ captureOutput: AVCaptureOutput!, 
      didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, 
                       from connection: AVCaptureConnection!)

请注意,此委托只会向我们提供图像缓冲区a.k.a CMSampleBuffer。因此,我们需要将此缓冲区转换为UIImage,并在您的情况下找到像素颜色。

以下是一些可以帮助你的SO答案。