2017-10-17 122 views

回答

4

如何獲得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