Примените фильтр к определенной подложке сегментации изображения - PullRequest
0 голосов
/ 07 ноября 2019

Мне нужно получить Teg SegmentationMatte из изображения, добавить к нему фильтр и сохранить его в новом или исходном изображении.

Вот мой текущий код:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
        pictureImageView.image = pickedImage
        picture = pickedImage

        if #available(iOS 13.0, *) {
            let base = CIImage(cgImage: picture.cgImage!)

            let maxcomp = CIFilter.maximumComponent()
            maxcomp.inputImage = base
            let makeup = maxcomp.outputImage

            guard let pictureCgImage = picture.cgImage else { return }

            let matte = CIImage(cgImage: pictureCgImage, options: [.auxiliarySemanticSegmentationTeethMatte : true,
            .auxiliarySemanticSegmentationSkinMatte : false,
            .auxiliarySemanticSegmentationHairMatte : false])

            let blend = CIFilter.blendWithMask()
            blend.backgroundImage = base
            blend.inputImage = makeup
            blend.maskImage = matte

            let result = blend.outputImage
            let context = CIContext()

            guard let filteredImage = result,
                let perceptualColorSpace = CGColorSpace(name: CGColorSpace.sRGB),
                let imageData = context.heifRepresentation(of: filteredImage, format: .RGBA8, colorSpace: perceptualColorSpace, options: [.semanticSegmentationTeethMatteImage: filteredImage]) else { return }

            let neededImage = CIImage(data: imageData) // our image with filtered teeth
        }
    }

    dismiss(animated: true, completion: nil)
}

В результате я ожидаю получить оригинальное изображение с отфильтрованными зубами. Но я получаю изображение с фильтром, добавленным ко всей картинке, а не только к матовым зубам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...