从相机获取 yuv 平面格式图像 - iOS

Posted

技术标签:

【中文标题】从相机获取 yuv 平面格式图像 - iOS【英文标题】:get yuv planar format image from camera - iOS 【发布时间】:2012-09-10 09:40:45 【问题描述】:

我正在使用 AVFoundation 使用 captureStillImageAsynchronouslyFromConnection 从相机捕获静止图像(捕获静止图像而不是视频帧)。这给了我一个 CMSSampleBuffer 类型的缓冲区,我称之为 imageDataSampleBuffer。

据我了解,这个缓冲区可以包含与媒体相关的任何类型的数据,而数据类型是在我配置输出设置时确定的。

对于输出设置,我制作了一个字典,其值为:AVVideoCodecJPEG,键为:AVVideoCOdecKey。

没有其他编解码器选项。但是当我阅读 AVFoundation Programming Guide>Media Capture 时,我可以看到 420f、420v、BGRA、jpeg 是 iPhone 3gs 支持的可用编码格式(我正在使用)

我想将 yuv420(即 420v)格式的图像数据放入 imageSampleBuffer。这可能吗?

如果我打印 availableImageDataCodecTypes,我只会得到 JPEG 如果我打印 availableImageDataCVPixelFormatTypes,我会得到三个数字 875704422、875704438、1111970369。

这三个数字有没有可能映射到420f、420v、BGRA?

如果是,我应该在输出设置中修改哪个键? 我尝试将值:[NSNumber numberWithInt:875704438] 用于键:(id)kCVPixelBufferPixelFormatTypeKey。 行得通吗?

如果是,我如何从 imageSampleBuffer 中提取这些数据?

另外,UIImage 以哪种格式存储?可以是任何格式吗?是否只是 NSData 带有一些额外的信息,使其被解释为图像?

【问题讨论】:

【参考方案1】:

我一直在尝试使用这种方法:

Raw image data from camera like "645 PRO"

我正在使用 writeToFile 保存数据,我一直在尝试使用 irfan 视图打开它。

但我无法验证保存的文件是否为 yuv 格式,不是因为 irfan 视图给出了无法读取标题的错误。

【讨论】:

以上是关于从相机获取 yuv 平面格式图像 - iOS的主要内容,如果未能解决你的问题,请参考以下文章

YUV帧结构(紧缩格式packed打包格式和平面格式planar)(A:B:C表示法)

将位图数组转换为 YUV(420 平面)?

图像处理YUV的详解

如何使用opencv将鱼眼相机拍摄的图像转换为平面(矩形)图像?

几种常见的YUV格式--yuv422:yuv420

使用Tensorflow Object Detection API作为平面图像识别器的最快方法是什么?