如何更改 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。所以它现在工作得很好。
我尝试创建实时头发颜色遮罩 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。所以它现在工作得很好。