在不拥有 iPhone 7+ 的情况下为 AVDepthData 构建应用程序的最佳方式是什么?
深度数据只能在具有双镜头摄像头的 iPhone 7+ 上捕获。但我猜任何 iOS11 设备都可以处理深度数据,前提是它可以访问包含它的照片。我在网上找不到来自 Apple 或其他方的任何此类媒体资源。有人有吗?或者,还有更好的方法?
我试图查看 iPhone 7+ 模拟器库,但模拟器崩溃了,因为它不支持深度演示应用程序正在使用的 Metal。
在不拥有 iPhone 7+ 的情况下为 AVDepthData 构建应用程序的最佳方式是什么?
深度数据只能在具有双镜头摄像头的 iPhone 7+ 上捕获。但我猜任何 iOS11 设备都可以处理深度数据,前提是它可以访问包含它的照片。我在网上找不到来自 Apple 或其他方的任何此类媒体资源。有人有吗?或者,还有更好的方法?
我试图查看 iPhone 7+ 模拟器库,但模拟器崩溃了,因为它不支持深度演示应用程序正在使用的 Metal。
虽然是一项非繁琐的任务,但可以生成 AVDepthData 并将其添加到您自己的图像中。
CGImageSource.h
CGImageSourceCopyAuxiliaryDataInfoAtIndex
- 但是,以下是更多详细信息:Key kCGImageAuxiliaryDataInfoData
- ( CFDataRef
) - 深度数据
仅包含一个二进制像素缓冲区。因为它是通过读取 CVPixelBufferLockBaseAddress 中的指针从像素缓冲区中提取的数据。您使用一种受支持类型的格式创建 CVPixelBuffer:
要将任意灰度图像转换为假深度缓冲区,您需要按像素将灰度像素值(0 = 黑色到 1 = 白色,zNear 到 zFar 等)转换为米或 1/米,具体取决于在您的目标格式上。并将它们转换为正确的浮点格式,具体取决于您从何处获取它们。
Key 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
}
您将需要有人(比如我)拥有 iPhone 7+ 和 iOS 11 来向您发送图像。
在 iOS 11 上使用 Safari 访问此链接,然后点击more...
->Save Image
http://hellocamera.co/img/depth-photo.heic
注意:我从这张图片中删除了 gps 数据。
我猜你可以在任何 iOS 设备上处理照片的深度数据。您所需要的只是 iPhone 7+ 拍摄的照片样本。这里有几个。