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);
}
MATLABでどのような形式を使用しますか? MATLABはどのような種類の画像もインポートできませんか? – jtbandes
MatlabはBGRAイメージをインポートできません。生データをiphoneにbmpとして保存してラップトップに持ち出せますか? –