2016-04-07 4 views
2

iphoneのカメラを使って生の画像データを取得し、ラップトップでmatlabまたはopencvを使用して後処理します。だから私は、この生の画像データをiPhoneからラップトップに持っていく必要があります。BGRA画像をiphoneに保存して後処理のためにラップトップに持ち込む方法

現在、AVFoudnationを使用して32BGRAイメージを取得しています(これは生のイメージデータです)。そして私はファイルとして保存しますが、私はそれをiPhoneから取ることはできません。 (?脱獄せずに任意のソリューションがあります)

後、いくつかの関連するコードです:

if let videoConnection = stillImageOutput!.connectionWithMediaType(AVMediaTypeVideo) { 
     videoConnection.videoOrientation = AVCaptureVideoOrientation.Portrait 
     stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {(sampleBuffer, error) in 
      if (sampleBuffer != nil) {         
       // get the raw image data 
       let cameraFrame = CMSampleBufferGetImageBuffer(sampleBuffer) 

       CVPixelBufferLockBaseAddress(cameraFrame!, 0) 

       let rawImage = CVPixelBufferGetBaseAddress(cameraFrame!) 
       let bytesPerRow = CVPixelBufferGetBytesPerRow(cameraFrame!) 
       let rawImageData = NSData.init(bytes: rawImage, length: bytesPerRow*CVPixelBufferGetHeight(cameraFrame!)) 

       // process the rawImageData, we now save it 
       var paths = NSSearchPathForDirectoriesInDomains (.DocumentDirectory, .UserDomainMask, true); 
       let documentsDirectory = paths[0] 
       let fileName = documentsDirectory.stringByAppendingString("/rawImageData")      

       do { 
        try rawImageData.writeToFile(fileName, options: NSDataWritingOptions.DataWritingFileProtectionComplete) 
       } catch { 

       } 
       print("Raw image data write successfully.") 
       print("Path of raw image data: ", fileName)     
       CVPixelBufferUnlockBaseAddress(cameraFrame!, 0)    
      } 
     }) 
    } 

は、私はどのように行うことができ、その場合、フォトアルバムにBGRAデータを保存し、それを取る必要がある場合それは(UIImageを使う?)

ありがとう。

更新:

私はUIImageにBGRAの画像を変換してから、私は5月Macに画像ファイルを取るためにairdropを使用して、フォトアルバムに保存するUIImageWriteToSavedPhotosAlbumを使用しています。しかし、私は画像がJPEG形式であることを発見しました。どうしましたか?

  if (sampleBuffer != nil) {     
       let rawImage:UIImage = self.imageFromSampleBuffer(sampleBuffer) 
       self.capturedImage.image = rawImage 
       UIImageWriteToSavedPhotosAlbum(rawImage, nil, nil, nil)      
       print("Raw Image write to photo album successfully") 
      } 

// Create a UIImage from sample buffer data 
func imageFromSampleBuffer(sampleBuffer : CMSampleBufferRef) -> UIImage 
{ 
// Get a CMSampleBuffer's Core Video image buffer for the media data 
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
// Lock the base address of the pixel buffer 
CVPixelBufferLockBaseAddress(imageBuffer!, 0); 


// Get the number of bytes per row for the pixel buffer 
let baseAddress = CVPixelBufferGetBaseAddress(imageBuffer!); 

// Get the number of bytes per row for the pixel buffer 
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer!); 
// Get the pixel buffer width and height 
let width = CVPixelBufferGetWidth(imageBuffer!); 
let height = CVPixelBufferGetHeight(imageBuffer!); 

// Create a device-dependent RGB color space 
let colorSpace = CGColorSpaceCreateDeviceRGB(); 

// Create a bitmap graphics context with the sample buffer data 
var bitmapInfo: UInt32 = CGBitmapInfo.ByteOrder32Big.rawValue 
bitmapInfo |= CGImageAlphaInfo.PremultipliedLast.rawValue & CGBitmapInfo.AlphaInfoMask.rawValue 
let context = CGBitmapContextCreate(baseAddress, width, height, 8, 
bytesPerRow, colorSpace, bitmapInfo); 
// Create a Quartz image from the pixel data in the bitmap graphics context 
let quartzImage = CGBitmapContextCreateImage(context); 
// Unlock the pixel buffer 
CVPixelBufferUnlockBaseAddress(imageBuffer!,0); 

// Create an image object from the Quartz image 
let image = UIImage.init(CGImage: quartzImage!); 

return (image); 
} 
+0

MATLABでどのような形式を使用しますか? MATLABはどのような種類の画像もインポートできませんか? – jtbandes

+0

MatlabはBGRAイメージをインポートできません。生データをiphoneにbmpとして保存してラップトップに持ち出せますか? –

答えて

1

私は解決策を見つける:続き はコードですUIImageにBGRAを変換、およびPNGに、その後、フォトアルバムに保存します。 PNGは可逆圧縮画像形式なので、bmp画像も取得できます。

   let rawImage:UIImage = self.imageFromSampleBuffer(sampleBuffer)      
       let img = UIImagePNGRepresentation(rawImage) 
       let pngImg = UIImage.init(data: img!)          
       self.capturedImage.image = pngImg 
       UIImageWriteToSavedPhotosAlbum(pngImg!, nil, nil, nil)     
       print("PNG Image write to photo album successfully") 
関連する問題