我正在尝试使用 GPUImage 框架的色键过滤器。我按照 Filtershowcase 示例进行操作,但显然我错过了一些东西,因为它只显示视频,但没有绿屏抠出效果。这是我对摄像机/滤镜的初始化:
camera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480
cameraPosition:AVCaptureDevicePositionBack];
camera.outputImageOrientation = UIInterfaceOrientationLandscapeLeft;
camera.horizontallyMirrorFrontFacingCamera = NO;
camera.horizontallyMirrorRearFacingCamera = NO;
chromaKeyFilter = [[GPUImageChromaKeyFilter alloc] init];
chromaKeyFilter.thresholdSensitivity = sliderThres.value;
UIImage *inputImage = [UIImage imageNamed:@"WID-small.jpg"];
GPUImagePicture *sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage
smoothlyScaleOutput:YES];
[camera addTarget:chromaKeyFilter];
[sourcePicture addTarget:chromaKeyFilter];
[sourcePicture processImage];
[chromaKeyFilter addTarget:viewCamera];
[camera startCameraCapture];
因此,camera 和 sourcePicture 都输入到过滤器中,过滤器然后输入到 viewCamera 中。但现在,我只能看到纯视频,没有色键效果。 (我有一个可以改变阈值的滑块)。
UPDATED使用 GPUImageChromaKeyBlendFilter
camera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
camera.outputImageOrientation = UIInterfaceOrientationLandscapeLeft;
chromaKeyFilter = [[GPUImageChromaKeyBlendFilter alloc] init];
UIImage *inputImage;
inputImage = [UIImage imageNamed:@"WID-small.jpg"];
GPUImagePicture *sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
[camera addTarget:chromaKeyFilter];
[sourcePicture processImage];
[sourcePicture addTarget:chromaKeyFilter];
[chromaKeyFilter addTarget:viewCamera];
[camera startCameraCapture];
使用此滤镜,它只是将其替换为黑色,而不是实际图像。
经过几天的尝试,发现了这个宝石...... https://github.com/BradLarson/GPUImage/issues/597#issuecomment-9949345。显然你应该坚持(强引用)GPUImagePicture。我的印象是过滤器链内部会有很强的参考,但事实并非如此。将其保留为实例变量解决了问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)