Ios iPhone摄像头原始数据处理代码

Ios iPhone摄像头原始数据处理代码,ios,xcode,camera,Ios,Xcode,Camera,我是iOS编程新手,我想知道是否有办法使用AVFoundation或Xcode中的其他库从相机访问10位或12位原始数据?如果是,怎么做 谢谢大家! 如果可以将图像加载到UIImage中,则可以使用核心图形来获取像素缓冲区。我怀疑它会以每像素16位的形式存储在内存中,但试试看 UIImage *image = ... CGImageRef imageRef = image.CGImage; // get the CGIma

我是iOS编程新手,我想知道是否有办法使用AVFoundation或Xcode中的其他库从相机访问10位或12位原始数据?如果是,怎么做


谢谢大家!

如果可以将图像加载到
UIImage
中,则可以使用核心图形来获取像素缓冲区。我怀疑它会以每像素16位的形式存储在内存中,但试试看

UIImage *image = ...

CGImageRef imageRef = image.CGImage;                                     // get the CGImageRef
NSAssert(imageRef, @"Unable to get CGImageRef");

CGDataProviderRef provider = CGImageGetDataProvider(imageRef);           // get the data provider
NSAssert(provider, @"Unable to get provider");

NSData *data = CFBridgingRelease(CGDataProviderCopyData(provider));      // get copy of the data
NSAssert(data, @"Unable to copy image data");

NSInteger       bitsPerComponent = CGImageGetBitsPerComponent(imageRef); // some other interesting details about image
NSInteger       bitsPerPixel     = CGImageGetBitsPerPixel(imageRef);
CGBitmapInfo    bitmapInfo       = CGImageGetBitmapInfo(imageRef);
NSInteger       bytesPerRow      = CGImageGetBytesPerRow(imageRef);
NSInteger       width            = CGImageGetWidth(imageRef);
NSInteger       height           = CGImageGetHeight(imageRef);
CGColorSpaceRef colorspace       = CGImageGetColorSpace(imageRef);

有关更多信息,请参阅。

您需要为摄像头捕获设置一个
AVCaptureSession
,然后使用代理功能:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

要捕获原始图像数据(sampleBuffer),请参阅:

Hi,Rob。
CGImageRef
CGDataProviderRef
是否在此处提供不同的图像数据?它们有何不同?谢谢。
CGImageRef
定义了更多的高级信息(宽度、高度、每像素位数、位图信息(例如是RGBA还是ARGB或…)。
CGDataProviderRef
提供逐像素数据。因此,获取
CGImageRef
,并使用它来获取该图像的
CGDataProviderRef
。注意,不要将此误认为“生的"文件。但是一旦它被转换成
UIImage
/
CGImageRef
,这就是你获取像素数据的方式。我总是错误地认为
raw
文件就是
CGDataProviderRef
?raw文件只包含像素信息,对吗?忘了我在哪里读到的了。谢谢。这取决于你的意思n由“raw”表示。在相机世界中,“raw”通常指制造商(通常为专有)的格式(如尼康NEF、佳能CRW等)。它包括许多其他内容(EXIF和其他元数据、JPG缩略图等)。CGDataProviderRef只包含逐像素和逐通道的数据,而不包含其他信息。因此,例如,如果您确实需要知道相机是否捕获了每个通道8、10、12或14位,
CGProviderRef
是不够的。如果您只需要知道它捕获了什么,那么它可能就可以了。只需要一个u从iPhone 5S的后置摄像头获得的有关AVFoundation格式的更新只能有三种格式:1.KCVPIXELFMORMATTYPE_420YPCBCCR8BIPLANARFULLRANGE 2.KCVPIXELFMORMATTYPE_420YPCBCCR8BIPLANARVIDEORANGE 3.KCVPIXELFMORMATTYPE_32BGRA