2016-11-17 1 views
0

Dans mon application, j'essaie d'appliquer un CIFilter (CIBumpDistortion) à mon image. Mon problème est lors de l'utilisation du paramètre kcIInputCenterKey, il semble que je dois donner des coordonnées numérotées. Quand je lance l'application, ce code renvoie les coordonnées oeil gauche:Paramètre de filtre d'image de base IOS

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)!) 

Cependant, comme je souhaite que l'utilisateur puisse choisir une image à utiliser, j'ai besoin Xcode pour trouver la position de l'œil gauche et appliquer la filtre à la zone, sans que je doive entrer manuellement les coordonnées.

J'ai essayé d'utiliser des chaînes, des types différents, etc à la place des nombres requis pour les coordonnées x et y, le tout sans aucune chance.

Toute aide serait extrêmement bienvenue et grandement appréciée!

Répondre

0

Voici comment je lis les choses. L'utilisateur doit choisir une image provenant d'une source inconnue (appareil photo, album photo, rouleau de caméra?).

  • Si l'image sélectionnée par l'utilisateur est d'un ensemble statique d'images, vous aurez besoin de trouver les valeurs X/Y manuellement et stocker leurs valeurs dans le code avant de les passer au filtre.

  • Si l'image sélectionnée par l'utilisateur est complètement inconnu avant la sélection, vous devriez vraiment avoir l'utilisateur, pas Xcode Dictate où l'œil gauche. (Alors que vous pouvez essayer le filtre de détection de bord, je pense que vous aurez plus de mal à être correct.)

Dans ce dernier cas, j'envisager d'ajouter 2-4 geste de reconnaissance, appuyez sur pour le point de départ, pincer pour redimensionner la zone, et peut-être tourner (pour faire pivoter) et pan (pour déplacer).

+0

Salut, dfd, Un grand merci pour vos suggestions. Je suis relativement nouveau au codage en général et n'aurais jamais pensé à essayer les reconnaisseurs de gestes! Merci encore, je vais recommencer. – Henry