我试图使用GPUImage框架的GPUImagePoissonBlendFilter来混合我的面部混合应用程序中的两个面。这是我的代码。
- (void)applyPoissonBlendToImage:(UIImage *) rearFace withImage:(UIImage *) frontFace
{
GPUImagePicture* picture1 = [[GPUImagePicture alloc] initWithImage:rearFace];
GPUImagePicture* picture2 = [[GPUImagePicture alloc] initWithImage:frontFace];
GPUImagePoissonBlendFilter * poissonFilter = [[GPUImagePoissonBlendFilter alloc] init];
poissonFilter.mix = .7;
poissonFilter.numIterations = 200;
[picture1 addTarget:poissonFilter];
[picture1 processImage];
[picture2 addTarget:poissonFilter];
[picture2 processImage];
finalResultImage = [poissonFilter imageFromCurrentlyProcessedOutputWithOrientation:rearFace.imageOrientation];
}
即如你所见,我给出了两个图像(rearFace和frontFace)作为此方法的输入。图像正面是一种形状(通过连接相对的眼睛和嘴部位置形成的多边形形状),并且具有与后面图像相同的尺寸i。(为了匹配尺寸,我填充了多边形外部的空间绘画时用透明的颜色。)
然而,混合不会像我预期的那样发生。即正面的锋利边缘没有适当地混入后面。我的假设是PoissonBlendFilter从左上角开始混合第二个图像而不是面部的左上边界。
问题:我觉得输入图像没有正确送入滤镜。我是否需要对输入图像应用某种掩模?任何人都可以指导我吗?
答案 0 :(得分:0)
使用双输入过滤器有时会使GPUImage变得棘手。将混合滤镜添加到第一个源图像时,请明确指定纹理位置。所以而不是:
[picture1 addTarget:poissonFilter];
试试这个:
[picture1 addTarget:poissonFilter atTextureLocation:0];
其余的(picture1
或其他)不需要这个,但是有两个输入过滤器的小错误有时需要明确指定纹理位置。