sampleBuffer를 UIImage로 변환하고 colorspaceGray가있는 이미지 뷰에 표시하려고합니다. 그러나 다음 이미지로 표시됩니다. 이 질문에 무엇이 잘못 되었습니까? CMSampleBuffer를 어떻게 변환 할 수 있습니까? CMSampleBuffer
는 당신에게 당신이 다음 직접 그레이 스케일 이미지를 생성되는 RGBA 데이터를주고있다처럼 CMSampleBuffer를 UIImage로 변환
0
A
답변
5
변환은 간단하다 :
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
let imageBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
let ciimage : CIImage = CIImage(cvPixelBuffer: imageBuffer)
let image : UIImage = self.convert(cmage: ciimage)
}
// Convert CIImage to CGImage
func convert(cmage:CIImage) -> UIImage
{
let context:CIContext = CIContext.init(options: nil)
let cgImage:CGImage = context.createCGImage(cmage, from: cmage.extent)!
let image:UIImage = UIImage.init(cgImage: cgImage)
return image
}
1
보인다. 각각의 픽셀에 대해 gray = (pixel.red+pixel.green+pixel.blue)/3
과 같은 새로운 버퍼를 생성해야합니다. 또는받은 데이터에서 일반 RGBA 이미지를 만든 다음 회색 음영으로 변환해야합니다.
하지만 코드에서 전혀 전환이 발생하지 않습니다. 어떤 종류의 데이터가 있더라도 CVPixelBufferGetBaseAddress
을 사용하여 버퍼에 원시 포인터를 가져 왔습니다. 그리고 수신 된 데이터가 그레이 스케일이라고 가정하는 이미지를 생성 할 때 같은 포인터를 전달합니다.
감사 합니다만, UIImage를 다시 CMSampleBuffer로 변환하는 방법은 무엇입니까? – user924