Próbuję użyć GPUImagePoissonBlendFilter struktury GPUImage do mieszania dwóch twarzy w mojej mieszanie twarzy. Oto mój kod.Mieszanie za pomocą 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];
}
Jak widać, daję dwa obrazy (rearFace i frontFace) jako wejścia do tej metody. Przednia powierzchnia obrazu jest kształtem (kształtem wielokąta utworzonym przez połączenie względnej pozycji oczka i ust) i ma taki sam rozmiar jak obraz tylnej płaszczyzny, np. (W celu dopasowania do rozmiaru, wypełniłem przestrzeń zewnętrzną do kształtu wielokątnego z przezroczystym kolorem podczas rysowania).
Jednak mieszanie nie następuje tak, jak się spodziewałem. tj. ostre krawędzie przedniej powierzchni nie są odpowiednio mieszane z tylną powierzchnią. Tutaj zakładam, że PoissonBlendFilter rozpoczyna mieszanie drugiego obrazu z jego lewego górnego rogu zamiast górnej lewej krawędzi twarzy.
Problem: Czuję, że obraz wejściowy nie jest prawidłowo podawany do filtra. Czy muszę zastosować jakiś rodzaj maskowania do obrazu wejściowego? Czy ktoś może mnie w tym poprowadzić?