我可以通过这样做获得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。任何帮助,将不胜感激。