capture UIImage from CMSampleBuffer (swift 3)



我尝试捕获从cmsamplebuffer捕获uiimage来读取文本。但是我总是会遇到错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

我环顾四周,尝试了很多版本。但是我总是遇到相同的错误。

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
        let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
        let image = CIImage(cvPixelBuffer: pixelBuffer!)
            let uiImage = UIImage(cgImage: image.cgImage!)
}

友善的问候!

CIImage.cgImage仅在CGImage创建CIImage时适用。当您从像素缓冲区创建CIImage时,它没有基础CGImage,因此属性为nil。

您可以直接从CIImage初始化UIImage,但是如何为您服务,将取决于您呈现该图像的位置/方式。(例如,如果您实时进行UIImageView,则CC_9在iOS 9及以上的表现不佳。)

要通过ciimage获得uiimage,您应该使用 cicontext。以下是OBJ-C代码:

CIContext *context = [CIContext contextWithOptions:nil];

,然后:

CGImageRef cgImage = [context createCGImage:yourCIImage fromRect:[yourCIImage extent] ];
UIImage *resultUIImage = [UIImage imageWithCGImage:cgImage scale:1.0 orientation:UIImageOrientationUp];

这种方法声称它仅使用GPU,因此很快。但是还有其他方法可以从 cvpixelbuffer 获得UIImage,例如使用 cgcontextref

最新更新