使用静止图像的GPUImage GPUImageChromaKeyBlendFilter

时间:2013-08-31 08:27:59

标签: ios filtering gpuimage

我想创建一个GPUImageView来实时显示过滤器(而不是继续阅读imageFromCurrentlyProcessedOutput)

是否可以使用GPUImage的GPUImageChromaKeyBlendFilter和静态源图像自动更新GPUImageView?

这是我的代码,将其读入UIImage;

    UIImage *inputImage = [UIImage imageNamed:@"1.JPG"];
    UIImage *backgroundImage = [UIImage imageNamed:@"2.JPG"];

    GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
    GPUImageChromaKeyBlendFilter *stillImageFilter = [[GPUImageChromaKeyBlendFilter alloc] init];
    [stillImageFilter setThresholdSensitivity:0.5];
    [stillImageFilter setColorToReplaceRed:0.0 green:1.0 blue:0.0];


    [stillImageSource addTarget:stillImageFilter];
    [stillImageSource processImage];


    UIImage *currentFilteredVideoFrame = [stillImageFilter imageByFilteringImage: backgroundImage ];

到目前为止,我尝试过的所有内容都要求您将'backgroundImage'作为目标添加到过滤器中(就像使用StillCamera一样)。如果将backgroundImage添加为目标,则GPUImage仅使用此新图像作为其基本图像。

有人可以帮忙吗?

谢谢,

1 个答案:

答案 0 :(得分:3)

不要将-imageByFilteringImage:与双输入过滤器一起使用,例如混合。这是一种基于UIImage快速设置小型过滤器链并获取UIImage的便捷方法。无论如何,你不会想要它用于定位GPUImageView的东西。

对于色度键混合,您需要使用-addTarget按顺序将输入图像(具有要替换的颜色的图像)和背景图像定位到混合,并使用GPUImagePicture实例。然后,将混合目标定位到GPUImageView。

请注意,如果您希望在此之后继续更新过滤器,则需要在设置方法之后保持对GPUImagePictures的强引用,因此您可能需要在控制器类上创建实例变量。

一旦你以这种方式设置,结果将转到你的GPUImageView。每次在两个图像中的一个上调用-processImage时,GPUImageView中的显示都将更新。因此,您可以在过滤器设置的每次更改后调用它,例如,如果您有更新过滤器值的滑块,则图像将实时更新。