使用GPUImage进行色度过滤视频?

Ric*_*III 3 video transparency ios gpuimage

我试图RGB: 0x00FF00使用@ BradLarson的真棒GPUImage工具包,使用透明度键(或全绿色)在我的应用程序中显示一个透明的视频文件.但是,我遇到了一些GPUImageChromaKeyFilter过滤器的困难,我不太明白为什么.

我的源视频文件是在我的Dropbox可在这里(12 KB 3秒长,充满绿色的背景,只是在屏幕上多)

我使用了标题为的示例项目SimpleVideoFilter.

这是我试图使用的代码(我只是替换-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];
Run Code Online (Sandbox Code Playgroud)

根据文档(稀疏),这应该具有替换视频中所有绿色的效果.相反,我把它作为输出:

视频截图

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

我也在设备上对此进行了测试,但无济于事.几乎所有其他过滤器我尝试使用工作,如GPUImageRGBFilter,GPUImageSepiaFilter等难道GPUImageChromaKeyFilter只是被打破?

任何有关这方面的帮助将不胜感激,因为此时我正在刮取视频的透明度.

Fra*_*ans 9

与原始问题类似,我想在自定义视图层次结构上添加绿屏视频.直播视频.事实证明,使用标准的GPUImage ChromaKey过滤器是不可能的.它不是alpha混合,而是将绿色像素与背景像素混合在一起.例如,红色背景变为黄色,蓝色变为青色.

让它工作的方法包括两个步骤:

1)确保filterview具有透明背景:

filterView.backgroundColor=[UIColor clearColor];
Run Code Online (Sandbox Code Playgroud)

2)修改GPUImageChromaKeyFilter.m

old: gl_FragColor = vec4(textureColor.rgb, textureColor.a * blendValue);
new: gl_FragColor = vec4(textureColor.rgb * blendValue, 1.0 * blendValue);
Run Code Online (Sandbox Code Playgroud)

现在,视频中的所有键控(例如绿色)像素都变得透明,并且可以发现滤镜视图下方的任何内容,包括:(在线 - )视频.