【问题标题】:Blending using GPUImagePoissonBlendFilter使用 GPUImagePoissonBlendFilter 进行混合
【发布时间】:2013-07-29 03:24:36
【问题描述】:

我正在尝试使用 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 从左上角开始混合第二张图像,而不是从人脸的左上角开始。

问题:我觉得输入的图像没有正确地输入过滤器。我需要对输入图像应用某种掩码吗?有人可以指导我吗?

【问题讨论】:

    标签: ios objective-c opengl-es face-detection gpuimage


    【解决方案1】:

    GPUImage 有时会因使用两个输入过滤器而变得棘手。当您将混合滤镜添加到第一个源图像时,请明确指定纹理位置。所以而不是:

    [picture1 addTarget:poissonFilter];

    试试这个:

    [picture1 addTarget:poissonFilter atTextureLocation:0];

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-16
      • 2012-12-06
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多