GPUImage フレームワークの GPUImagePoissonBlendFilter を使用して、顔ブレンディング アプリケーションで 2 つの顔をブレンドしようとしています。これが私のコードです。
- (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];
}
つまり、ご覧のとおり、このメソッドへの入力として 2 つの画像 (rearFace と frontFace) を指定しています。画像の前面は形状 (相対的な目と口の位置を結合することによって形成される多角形) であり、rearFace 画像と同じサイズです (サイズを合わせるために、多角形の外側のスペースを塗りつぶしました)。描画中に透明色で)。
しかし、私が期待したようにブレンドは起こりません。つまり、前面の鋭いエッジが背面に適切にブレンドされていません。ここで、PoissonBlendFilter は、顔の左上の境界ではなく、左上隅から 2 番目の画像のブレンドを開始すると仮定しています。
問題:入力画像が正しくフィルターに入力されていないように感じます。入力画像にある種のマスキングを適用する必要がありますか? 誰でもこれで私を案内できますか?