9

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

我已经在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 }
}

我现在正在尝试按照这个问题的答案来获取像素值,CVPixelBufferRef但是当使用 14 位 Bayer RGGB 像素格式而不是答案中提到的 32 位 RGB 格式时,我无法弄清楚如何做到这一点。

4

1 回答 1

0

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

此处列出了可用的类型。在你的情况下,我猜kCVPixelFormatType_14Bayer_BGGR

然后你需要知道数据是如何存储的。根据iOS 中的什么是 CVPixelBuffer?这是

“Bayer 14 位 Little-Endian,打包成 16 位,订购 RGR G... 与 GBG B...”

然后,您以与在 Swift 中从 CVPixelBufferRef 中获取像素值相同Uint16的方式提取像素。Uint8

于 2019-10-18T11:33:48.550 回答