2016-12-08 8 views
0

CMSampleBufferからUIImageをキャプチャしてテキストを読み込もうとします。しかし、私はいつもエラーが表示されます:CMSampleBuffer(swift 3)から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!) 
} 

よろしくお願いいたします。

+0

どのアンラップでエラーが発生しているのかはわかりません。 'image'または' uiImage'? –

+0

あなたは間違ったuiimageイニシャライザを使用しています。あなたはcgimageの代わりにciimageを使う必要があります –

答えて

1

CIImage.cgImageは、CIImageCGImageから作成された場合にのみ適用されます。ピクセルバッファからCIImageを作成すると、そのプロパティはnilであるため、そのピクセルはCGImageになりません。

あなたはinitialize a UIImage direct from a CIImageになることができますが、それはどのようにあなたがその画像をレンダリングするかによって決まります。 (たとえば、あなたがリアルタイムでそれをやっている場合UIImageViewが悪いのiOS 9における性能と古いを与える、と言う、でCI担保UIImageのレンダリング。)

-1

をあなたはCIContextを使用する必要がありますCIImage経由UIImageを取得するには。以下 は、オブジェクト - 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から、CGContextRefのように、UIImageを取得する他の方法があります。

関連する問題