从CVPixelBufferRef获取RAW Bayer像素数据

时间:2017-05-25 16:26:59

标签: ios image-processing cvpixelbuffer

我正在使用AVCaptureSession& AVCapturePhotoOutputkCVPixelFormatType_14Bayer_RGGB格式从设备的相机中捕获RAW照片数据。

我已经获得了AVCapturePhotoCaptureDelegate回调中的原始照片样本缓冲区:

func capture(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingRawPhotoSampleBuffer rawSampleBuffer: CMSampleBuffer?, previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Error?) {

    guard let rawSampleBuffer = rawSampleBuffer  else { return }

    guard let pixelBuffer = CMSampleBufferGetImageBuffer(rawSampleBuffer) else { return }

}

我现在正试图按照this question的答案来获取CVPixelBufferRef的像素值,但是在使用14位拜耳RGGB像素格式而不是像素格式时,我无法解决这个问题。答案中提到了32位RGB格式。

1 个答案:

答案 0 :(得分:0)

首先,您需要找出缓冲区的“像素格式类型”。这是通过CVPixelBufferGetPixelFormatType函数完成的。

列出的可用类型为here。就您而言,我猜是kCVPixelFormatType_14Bayer_BGGR

然后,您需要知道数据的存储方式。根据{{​​3}},是

  

“以16位打包的Bayer 14位Little-Endian,订购了R G R G ...与G B G B ...交替出现”。

然后,以与What is a CVPixelBuffer in iOS?Uint16相同的方式提取Uint8的像素。