作者:卡吉米国际早教_763 | 来源:互联网 | 2023-01-12 17:22
现在我AVDepthPhotoFilter
从iPhone7Plus的立体相机中运行Rendering Depth Deta.
所以,我想访问每像素深度数据,但是,我不知道该怎么做.请指教.
1> Oscar..:
如何获取DepthData和分析CVPixelBuffer数据
您需要确保您的AVCapturePhotoSettings()具有isDepthDataDeliveryEnabled = true
你必须使用函数func photoOutput(_ output:AVCapturePhotoOutput,didFinishProcessingPhoto photo:AVCapturePhoto,error:Error?)
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
//## Convert Disparity to Depth ##
let depthData = (photo.depthData as AVDepthData!).converting(toDepthDataType: kCVPixelFormatType_DepthFloat32)
let depthDataMap = depthData.depthDataMap //AVDepthData -> CVPixelBuffer
//## Data Analysis ##
// Useful data
let width = CVPixelBufferGetWidth(depthDataMap) //768 on an iPhone 7+
let height = CVPixelBufferGetHeight(depthDataMap) //576 on an iPhone 7+
CVPixelBufferLockBaseAddress(depthDataMap, CVPixelBufferLockFlags(rawValue: 0))
// Convert the base address to a safe pointer of the appropriate type
let floatBuffer = unsafeBitCast(CVPixelBufferGetBaseAddress(depthDataMap), to: UnsafeMutablePointer.self)
// Read the data (returns value of type Float)
// Accessible values : (width-1) * (height-1) = 767 * 575
let distanceAtXYPoint = floatBuffer[Int(x * y)]
}
如果您想了解有关CVPixelBuffer分析的更多信息,这里有一个有用的帖子 - > 详细信息