Итак, CIFilter
принимает изображение в формате RAW DNG. Есть ли способ вернуть изображение в формате RAW?
Я пытаюсь смешать изображения RAW, загруженные как CIFilter
, а затем вывести их как RAW обратно. Это простая интерполяция значений RAW буфера. Да, я понимаю, что на фотографиях в формате RAW нет пикселей. Я просто пытаюсь работать с базовым представлением фильтра BAYER. Есть ли способ сделать это с помощью CIFilter
. Как насчет использования сторонней библиотеки?
РЕДАКТИРОВАТЬ: что я пытаюсь сделать:
Итак, я пытаюсь смешать (что-то вроде наложение экспозиции) нескольких изображений, снятых с помощью . Итак, у меня есть буфер пикселей для нескольких фотографий RAW, и я пытаюсь усреднить их значения пикселей.
Перед этим я пытаюсь подтвердить правильность моих значений пикселей. Итак, я делаю фотографию красно-зеленого или синего листа бумаги, чтобы он был одного сплошного цвета (иш), и пытаюсь проверить, соответствуют ли значения пиксельного буфера тем, что я ожидал. На iPhone есть RGGB байер-макет, поэтому я ожидаю, что очень сплошное красное изображение будет иметь следующий макет:
Col0 Col1 Col3 Col4...
Row 0: [HIGH LOW HIGH LOW ....]
Row 1: [LOW LOW LOW LOW ....]
Row 2: [HIGH LOW LOW LOW ....]
Для этого у меня есть следующий код:
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
guard error == nil else { print("Error capturing photo: \(error!)"); return }
guard let pixelBuffer = photo.pixelBuffer else {return}
guard let baseAddress = CVPixelBufferGetBaseAddress(pixelBuffer) else {return}
let bufferHeight = Int(CVPixelBufferGetHeight(pixelBuffer))
let uint16Buffer = baseAddress.assumingMemoryBound(to: UInt16.self)
for row in 0..<bufferHeight {
let col0 = uint16Buffer[row*bufferWidth + 0]
let col1 = uint16Buffer[row*bufferWidth + 1]
let col2 = uint16Buffer[row*bufferWidth + 2]
let col3 = uint16Buffer[row*bufferWidth + 3]
print(col0, col1, col2, col3) // See pixel values
if (row > 3) {break} // don't print more than 4 rows for debugging
}
}