IOS核心图像过滤器参数

时间:2016-11-17 13:29:51

标签: ios swift core-image imagefilter

在我的应用中,我尝试将CIFilter(CIBumpDistortion)应用于我的图像。 我的问题是当使用kcIInputCenterKey参数时,似乎我必须给出编号坐标。当我运行应用程序时,此代码返回左眼坐标:

if (face.hasLeftEyePosition) {
                NSLog("Left eye %g %g", face.leftEyePosition.x, face.leftEyePosition.y);

Hence, I can manually then enter the left eye coordinates into the kCInputCenterKey and then run the app again and the filter is applied to the left eye centre point:

let filter = CIFilter(name: "CIBumpDistortion")
            filter?.setValue(ciImage, forKey: kCIInputImageKey)
            filter?.setValue(0.5, forKey: kCIInputScaleKey)
            filter?.setValue(200, forKey: kCIInputRadiusKey)

            filter?.setValue(CIVector(x:150, y: 150), forKey: kCIInputCenterKey)
            if let output = filter?.value(forKey: kCIOutputImageKey) as? CIImage {
                self.chosenImage?.image = UIImage(cgImage: context.createCGImage(output, from: output.extent)!)

但是,由于我希望用户能够选择要使用的任何图像,我需要Xcode找到左眼位置并将滤镜应用到该区域,而无需手动输入坐标。

我尝试过使用字符串,不同类型等代替x和y坐标所需的数字,但都没有运气。

非常欢迎任何帮助,非常感谢!

1 个答案:

答案 0 :(得分:0)

以下是我正在阅读的内容。用户需要从未知来源(相机?相册?相机胶卷?)中选择图像。

  • 如果用户选择的图像来自静态图像集,则需要手动查找X / Y值并将其值存储在代码中,然后再将其传递给过滤器。

    < / LI>
  • 如果在选择之前用户选择的图像完全未知,那么您确实应该用户,而不是 Xcode 指示左眼的位置。 (虽然您可以尝试使用边缘检测滤波器,但我认为您将更难以正确使用。)

在后一种情况下,我会考虑添加2-4个手势识别器,点击初始点,捏合以调整区域大小,还可以旋转(旋转)和平移(移动)。