我尝试使用 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)作为此方法的输入。图像正面是一个形状(通过连接相对的眼睛和嘴巴位置形成的多边形形状),并且与背面图像的大小相同,即(为了匹配大小,我填充了多边形形状外部的空间)绘图时使用透明颜色)。
然而混合并没有像我预期的那样发生。即正面的锋利边缘没有正确地融入背面。这里我的假设是 PoissonBlendFilter 从左上角而不是脸部的左上角边界开始混合第二个图像。
问题:我觉得输入图像没有正确输入到过滤器中。我需要对输入图像应用某种屏蔽吗?有人可以指导我吗?
GPUImage 有时会因使用双输入过滤器而变得棘手。将混合滤镜添加到第一个源图像时,请明确指定纹理位置。所以而不是:
[picture1 addTarget:poissonFilter];
尝试这个:
[picture1 addTarget:poissonFilter atTextureLocation:0];
其余的部分 (picture1
或任何其他)不需要这个,但是两个输入过滤器有一个小错误,有时需要明确指定纹理位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)