0

我可以通过这样做获得depthData:

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithDeviceType:AVCaptureDeviceTypeBuiltInTrueDepthCamera mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];

AVCaptureDeviceInput *input = [[AVCaptureDeviceInput alloc] initWithDevice:device error:nil];

然后:

    if ([captureSession canAddInput:input]) {
        [captureSession beginConfiguration];
        captureSession.sessionPreset = AVCaptureSessionPresetPhoto;
        [captureSession addInput:input];
        
       photoOutput = [[AVCapturePhotoOutput alloc] init];
        
        if ([captureSession canAddOutput:photoOutput]) {
            [captureSession addOutput:photoOutput];
            
            videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession];
            videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspect;
            videoPreviewLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;
            [_previewView.layer addSublayer:videoPreviewLayer];
            
            [captureSession commitConfiguration];
            
            [photoOutput setDepthDataDeliveryEnabled:photoOutput.isDepthDataDeliverySupported];
            
            [captureSession startRunning];
        }
    } else {
        NSLog(@"Cannot add input.");
    }

然后,在捕获时:

AVCapturePhotoSettings *photoSettings;
if ([[photoOutput availablePhotoCodecTypes] containsObject:AVVideoCodecTypeHEVC]) {
    photoSettings = [AVCapturePhotoSettings photoSettingsWithFormat:@{AVVideoCodecKey: AVVideoCodecTypeHEVC}];
} else {
    photoSettings = [[AVCapturePhotoSettings alloc] init];
}
[photoSettings setDepthDataDeliveryEnabled:photoOutput.isDepthDataDeliverySupported];
[photoOutput capturePhotoWithSettings:photoSettings delegate:self];

然后,在委托中:

- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error {
    NSLog(@"%@", photo.depthData);
}

depthData 在那里,好的。但是现在我如何使用它来删除图像背景并替换为任何其他图像?

我发现的所有示例都只显示直到获取 depthData。任何帮助,将不胜感激。

4

0 回答 0