深度数据 - 获取每像素深度数据(CVPixelBuffer数据分析)
问题描述:
现在我运行AVDepthPhotoFilter
,即从iPhone7Plus的立体相机渲染深度参数。深度数据 - 获取每像素深度数据(CVPixelBuffer数据分析)
所以,我想访问每像素深度数据,但是,我不知道该怎么做。请指教。
答
如何获得DepthData和分析CVPixelBuffer数据
你需要确保你的AVCapturePhotoSettings()已isDepthDataDeliveryEnabled =真
-
你必须使用的函数FUNC photoOutput(_输出: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<Float32>.self) // Read the data (returns value of type Float) // Accessible values : (width-1) * (height-1) = 767 * 575 let distanceAtXYPoint = floatBuffer[Int(x * y)] }
如果您想了解CVPixelBuffer分析更多的信息,这里是一个有用的帖子 - >details
帮了我很多。 – Eyzuky