在没有拥有iPhone 7 +的情况下,为AVDepthData构建应用程序的最佳方法是什么?
深度数据只能在配备双镜头相机的iPhone 7+上拍摄。但我想任何iOS11设备都可以处理深度数据,前提是它可以访问包含它的照片。我无法在线找到Apple或其他方面的任何此类媒体资源。有人有吗?或者有更好的方法吗?
我试图调查iPhone 7+模拟器库,但模拟器崩溃,因为它不支持深度演示应用程序正在使用的Metal。
答案 0 :(得分:2)
你需要一个拥有iPhone 7+和iOS 11的人(比如我)给你一个图像。
在iOS 11上使用Safari访问此链接,然后点按more...
- > Save Image
http://hellocamera.co/img/depth-photo.heic
注意:我从此图片中删除了gps数据。
答案 1 :(得分:1)
虽然是非繁琐任务,但可以生成AVDepthData并将其添加到您自己的图像中。
CGImageSource.h
CGImageSourceCopyAuxiliaryDataInfoAtIndex
中记录的那样 - 但是,以下是更多详细信息:键kCGImageAuxiliaryDataInfoData
- (CFDataRef
) - 深度数据
仅包含二进制像素缓冲区。因为它是通过读取CVPixelBufferLockBaseAddress中的指针从像素缓冲区中提取的数据。您可以使用以下支持类型之一的格式创建CVPixelBuffer:
要将任意灰度图像转换为伪深度缓冲区,您需要逐像素地将您的灰度像素值(0 =黑色到1 =白色,z接近zFar等)转换为米或1 /米取决于您的目标格式。并将它们设置为正确的浮点格式,具体取决于您从哪里获取它们。
键kCGImageAuxiliaryDataInfoDataDescription
- (CFDictionary
) - 深度数据描述
告诉你如何解释我们给你的缓冲区,或告诉我们如何解释你给我们的缓冲区:
键kCGImageAuxiliaryDataInfoMetadata
- (CGImageMetadataRef
) - 元数据
此值是可选的。
使用ImageI / O创建图像:
// create the image destination (not shown)
// add an image to the destination
CGImageDestinationAddImage(cgImageDestination, renderedCGImage, attachments)
// Use AVDepthData to get auxiliary data dictionary
VAR auxDataType:的NSString?
让AUXDATA = depthData.dictionaryRepresentation(forAuxiliaryDataType:安培; auxDataType)
// Add auxiliary data to image destination
CGImageDestinationAddAuxiliaryDataInfo(cgImageDestination, auxDataType!, auxData! as CFDictionary)
if CGImageDestinationFinalize(cgImageDestination) {
return data as Data
}
答案 2 :(得分:0)
我猜您可以在任何iOS设备上处理照片的深度数据。您只需要iPhone 7+拍摄的照片样本即可。 Here是他们中的一小部分。