深度数据 - 获取每像素深度数据(CVPixelBuffer数据分析)

问题描述:

现在我运行AVDepthPhotoFilter,即从iPhone7Plus的立体相机渲染深度参数。深度数据 - 获取每像素深度数据(CVPixelBuffer数据分析)

所以,我想访问每像素深度数据,但是,我不知道该怎么做。请指教。

如何获得DepthData和分析CVPixelBuffer数据

  1. 你需要确保你的AVCapturePhotoSettings()已isDepthDataDeliveryEnabled =真

  2. 你必须使用的函数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

+0

帮了我很多。 – Eyzuky