'GPUImagePoissonBlendFilter produces weird result

I am trying to use GPUImage (Objective-C) pod in order to blend two images with GPUImagePoissonBlendFilter in Swift project. The result is kinda weird and I don't understand how to fix it.

Sample project:

Back image

Front image

Result image

What is going on in code:

  1. Load Back image into backImage

  2. Load Front image into frontImage

  3. Blend images with GPUImagePoissonBlendFilter

  4. Result put to imageView

     class ViewController: UIViewController {
    
     private let imageView: UIImageView = {
         let image = UIImage(named: "back")
         let imageView = UIImageView(image: image)
         imageView.contentMode = .scaleAspectFill
         imageView.clipsToBounds = true
         imageView.translatesAutoresizingMaskIntoConstraints = false
         imageView.layer.borderWidth = 1
         imageView.layer.borderColor = UIColor.green.cgColor
         return imageView
     }()
    
     override func viewDidLoad() {
         super.viewDidLoad()
         view.backgroundColor = UIColor.black
         view.addSubview(imageView)
         NSLayoutConstraint.activate([
             imageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10),
             imageView.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor)
         ])
    
         guard let backImage = imageView.image else { return }
         guard let frontImage = UIImage(named: "front") else { return }
    
    
         let backImageSource = GPUImagePicture(image: backImage)
         let frontImageSource = GPUImagePicture(image: frontImage)
    
         let poisionFilter = GPUImagePoissonBlendFilter()
         poisionFilter.mix = 0.9
         poisionFilter.numIterations = 100
         backImageSource?.addTarget(poisionFilter, atTextureLocation: 0)
         frontImageSource?.addTarget(poisionFilter)
         backImageSource?.processImage()
         frontImageSource?.processImage()
         poisionFilter.useNextFrameForImageCapture()
         let filterResult = poisionFilter.imageFromCurrentFramebuffer()
         imageView.image = filterResult
     }}
    

Can anyone point what I am doing wrong here ?

Thanks in advance !



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source