色度过滤video使用GPUImage?

我正在尝试使用透明键( RGB: 0x00FF00 ,或全绿)在我的应用程序中使用@ BradLarson令人敬畏的GPUImage工具包显示透明的video文件。 但是,我遇到了一些GPUImageChromaKeyFilterfilter的困难,我不明白为什么。

我的源video文件可在我的保存箱(12 KB,3秒长,完整的绿色背景,只是在屏幕上的一个方块),

我使用了名为SimpleVideoFilter的示例项目。

这是我尝试使用的代码(我简单地replace了-viewDidLoad ):

 NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"]; movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL]; filter = [[GPUImageChromaKeyFilter alloc] init]; [filter setColorToReplaceRed:0 green:1 blue:0]; [filter setEnabled:YES]; [movieFile addTarget:filter]; GPUImageView *filterView = (GPUImageView *)self.view; [filter addTarget:filterView]; [movieFile startProcessing]; 

根据文档(这是稀疏的),这应该有更换video中的所有绿色的效果。 相反,我把它作为输出:

视频的屏幕截图

这告诉我,video正在播放(因此它正在复制到应用程序),但它似乎没有做任何色度键控。 为什么会这样? 我是否需要手动设置平滑值和阈值? 我不应该,因为源只包含两种颜色( 0x00FF000x000000 )。

我也在设备上testing过这个,没有用。 几乎所有其他的filter,我试图使用工作,如GPUImageRGBFilterGPUImageSepiaFilter ,等GPUImageChromaKeyFilter只是被打破?

任何帮助,这将不胜感激,因为在这一点上,我刮在video的透明度桶的底部。

与原始问题类似,我想在自定义视图层次结构上放置一个绿色屏幕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。

我通过使用GPUImageChromaKeyBlendFilter并设置背景图像来实现它。 我想知道如果我们可以做,而不必设置背景。 当我不设置背景时,电影显示为白色,但添加背景渲染罚款…

 filter = [[GPUImageChromaKeyBlendFilter alloc] init]; [(GPUImageChromaKeyBlendFilter *)filter setColorToReplaceRed:0.0 green:1.0 blue:0.0]; [(GPUImageChromaKeyBlendFilter *)filter setThresholdSensitivity:0.4]; UIImage *inputImage = [UIImage imageNamed:@"background.png"]; sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; [sourcePicture addTarget:filter]; [sourcePicture processImage];