使用GPUImagePoissonBlendFilter进行混合

我试图使用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)作为input。 图像正面是一个形状(通过连接相对眼睛和嘴的位置形成的多边形形状),并且具有与背面图像i.e相同的尺寸(为了匹配尺寸,我填充了多边形外部的空间在绘图时具有透明的颜色)。

但是混合不会像我预期的那样发生。 即正面的锋利边缘没有适当地混合到背面。 这里我的假设是PoissonBlendFilter从左上angular开始混合第二个图像,而不是脸部的左上边界。

问题:我觉得input图像没有正确input到滤镜中。 我是否需要对input图像应用某种遮罩? 任何人都可以引导我呢?

使用双inputfilter时GPUImage有时会变得棘手。 当您将混合filter添加到第一个源图像时,请明确指定纹理位置。 所以,而不是:

[picture1 addTarget:poissonFilter];

尝试这个:

[picture1 addTarget:poissonFilter atTextureLocation:0];

其余的( picture1或任何其他)不需要这个,但是有两个inputfilter,有时需要明确指定纹理位置的一个小错误。