在我的应用中,我尝试将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坐标所需的数字,但都没有运气。
非常欢迎任何帮助,非常感谢!
答案 0 :(得分:0)
以下是我正在阅读的内容。用户需要从未知来源(相机?相册?相机胶卷?)中选择图像。
如果用户选择的图像来自静态图像集,则需要手动查找X / Y值并将其值存储在代码中,然后再将其传递给过滤器。
< / LI>如果在选择之前用户选择的图像完全未知,那么您确实应该用户,而不是 Xcode 指示左眼的位置。 (虽然您可以尝试使用边缘检测滤波器,但我认为您将更难以正确使用。)
在后一种情况下,我会考虑添加2-4个手势识别器,点击初始点,捏合以调整区域大小,还可以旋转(旋转)和平移(移动)。