如何更改 CIImage 掩码的大小作为 Swift 中 blendKernel.apply 函数的输入

How to change the size of a CIImage mask as an input to blendKernel.apply function in Swift

我尝试创建实时头发颜色遮罩 IOS 应用程序。我使用 UIGraphicsGetImageFromCurrentImageContext() 函数从视频中合并蒙版和背景。它可以工作,但图像质量不够好。我想更改我的代码以使用 blendKernel.apply(foreground: maskCI!, background: backgroundCI!) 函数。在那种情况下,遮罩的大小和位置与背景图像不匹配。蒙版图像显示在背景图像的右下角。我的背景图像大小为 1080x1080,遮罩图像为 224x224。你能告诉我如何重叠蒙版和背景吗?请在下面查看我的代码:

class IntegrateViewAndMask {
    var blendKernel: CIBlendKernel { return .softLight }

    func mergeMaskAndBackground(mask: UIImage, background: CVPixelBuffer, size: Int) -> UIImage? {
        // Merge two images
//        let sizeImage = CGSize(width: size, height: size)

//        UIGraphicsBeginImageContext(sizeImage)

//        let areaSize = CGRect(x: 0, y: 0, width: sizeImage.width, height: sizeImage.height)

        // background
        var background = UIImage(pixelBuffer: background)

//      crop image to square 1080 x 1080
        background = cropImageToSquare(image:background!)

//        background?.draw(in: areaSize)

        // mask
//        mask.draw(in: areaSize)

        let backgroundCI = CIImage(image: background!)

        let maskCI = CIImage(image: mask)

        let trialImage = blendKernel.apply(foreground: maskCI!, background: backgroundCI!)

        let trialImageUI = UIImage(ciImage:trialImage!)

//        let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!

//        UIGraphicsEndImageContext()

        return trialImageUI



我刚找到答案并尝试了一下。请看下面link。按照建议,我将 UIimage 的大小调整为边界正方形,然后转换为 CIImage。所以它现在工作得很好。