2013-07-29 35 views
8

Tôi đang cố gắng sử dụng GPUImagePoissonBlendFilter của khung GPUImage để trộn hai khuôn mặt trong ứng dụng trộn khuôn mặt của tôi. Đây là mã của tôi.Pha trộn bằng 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]; 
    } 

tức là bạn có thể thấy, tôi đưa ra hai hình ảnh (rearFace và frontFace) làm đầu vào cho phương pháp này. Mặt trước hình ảnh là một hình dạng (hình đa giác được hình thành bằng cách gia nhập mắt và mắt của người tương đối) và có cùng kích thước với hình ảnh rearFace i .e (Để khớp với kích thước, tôi đã lấp đầy không gian bên ngoài với hình đa giác với màu trong suốt trong khi vẽ).

Tuy nhiên việc trộn không xảy ra như tôi mong đợi. tức là các cạnh sắc của mặt trước không được pha trộn vào mặt sau đúng cách. Ở đây giả định của tôi là PoissonBlendFilter bắt đầu pha trộn hình ảnh thứ hai từ góc trên bên trái của nó chứ không phải là ranh giới trên cùng bên trái của khuôn mặt.

Sự cố: Tôi cảm thấy rằng hình ảnh đầu vào không được đưa vào bộ lọc chính xác. Tôi có cần áp dụng một số loại mặt nạ cho hình ảnh đầu vào không? Bất cứ ai có thể hướng dẫn tôi trong này?

Trả lời

0

GPUImage đôi khi có thể trở nên phức tạp với bộ lọc hai đầu vào. Khi bạn thêm bộ lọc pha trộn vào hình ảnh nguồn đầu tiên, hãy xác định vị trí kết cấu một cách rõ ràng. Vì vậy, thay vì:

[picture1 addTarget:poissonFilter];

Hãy thử điều này:

[picture1 addTarget:poissonFilter atTextureLocation:0];

Phần còn lại (picture1 hoặc bất kỳ người khác) không cần điều này, nhưng có một lỗi nhỏ với hai bộ lọc đầu vào đôi khi yêu cầu chỉ định rõ ràng vị trí kết cấu.

Các vấn đề liên quan