我尝试捕获从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 。