GPUImage色度键filter

我正在尝试使用GPUImage框架的色度键filter。 我跟着Filtershowcase的例子,但显然我错过了一些事情,只显示video,但没有绿屏输出效果。 这是我的video摄像头/filter的初始化:

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]; 

所以相机和sourcePicture都进入了滤镜,滤镜比进入viewCamera。 但是现在,我只看到简单的video,没有抠像效果。 (我有一个滑块,改变了门槛)。

用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]; 

有了这个filter,它简单地用黑色取代,而不是实际的图像。

经过几天的尝试….find了这个gem 。 显然你应该坚持(强大的参考)GPUImagePicture。 我以为内部的过滤链会有很强的参考,但事实并非如此。 保持它作为实例var解决了这个问题。

我想你想GPUImageChromaKeyBlendFilter,而不是GPUImageChromaKeyFilter。

混合采用两个源图像,并将第一个图像中的键控颜色与第二个图像中的像素进行匹配。 常规色度键控filter简单地将与目标色彩匹配的像素的alpha通道减less到0.0,而不会混合到另一个图像中。

与原始问题类似,我想在自定义视图层次结构上放置一个绿色屏幕video。 现场video。 原来,使用标准的GPUImage ChromaKeyfilter是不可能的。 它混合了绿色像素和背景像素,而不是alpha混合。 例如红色背景变成黄色,蓝色变成青色。

实现它的工作方式涉及两个步骤:

1)确保filterview有一个透明的背景:

 filterView.backgroundColor=[UIColor clearColor]; 

2)修改GPUImageChromaKeyFilter.m

 old: gl_FragColor = vec4(textureColor.rgb, textureColor.a * blendValue); new: gl_FragColor = vec4(textureColor.rgb * blendValue, 1.0 * blendValue); 

现在,video中的所有键控(例如绿色)像素都变为透明,并揭示filterview下方的所有像素。 (在线 – )video。

你是否设置了滑块的目标和select器?

这对我有效

 [(GPUImageChromaKeyFilter *)filter setThresholdSensitivity:[(UISlider *)sender value]]; [image setImage:[filter imageByFilteringImage:sourceImage]]; 

希望有所帮助。