2016-11-17 2 views
0

In meiner App versuche ich einen CIFilter (CIBumpDistortion) auf mein Bild anzuwenden. Mein Problem ist, wenn ich den Parameter kcIInputCenterKey verwende, scheint es, dass ich nummerierte Koordinaten geben muss. Wenn ich die app ausführen, gibt dieser Code das linke Auge Koordinaten:IOS Core Image Filter Parameter

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

Da ich jedoch der Benutzer wünschen, verwenden Sie ein beliebiges Bild holen zu können, ich Xcode brauchen die linke Augenposition zu finden und gelten die Filter auf den Bereich, ohne dass ich die Koordinaten manuell eingeben muss.

Ich habe versucht, Strings, verschiedene Typen usw. anstelle der Zahlen für die X-und Y-Koordinaten, alles ohne Glück.

Jede Hilfe wäre sehr willkommen und sehr geschätzt!

Antwort

0

Hier ist, wie ich Dinge lese. Der Benutzer muss ein Bild von einer unbekannten Quelle auswählen (Kamera? Fotoalbum? Kamerarolle?).

  • Wenn das vom Benutzer ausgewählten Bild von einem statischen Satz von Bildern ist, müssen Sie die X/Y-Werte manuell finden und ihre Werte in Code speichern, bevor sie in die Filter passieren.

  • Wenn das vom Benutzer ausgewählten Bild völlig unbekannt vor der Auswahl ist, sollten Sie wirklich haben den Benutzer, nicht Xcode dictate, wo das linke Auge ist. (Während Sie den Kantenerkennungsfilter versuchen könnte ich glaube, Sie werden eine härtere Zeit haben, richtig zu sein.)

Im letzteren Fall, dass ich 2-4 Geste Erkenner Zugabe betrachten würde, tippen Sie für den Anfangspunkt, Prise, um die Größe des Bereichs zu ändern und möglicherweise zu drehen (um zu drehen) und zu schwenken (um sich zu bewegen).

+0

Hallo, dfd, Vielen Dank für Ihre Vorschläge. Ich bin relativ neu im Codieren im Allgemeinen und hätte nie gedacht, Gestenerkenner auszuprobieren! Nochmals vielen Dank, ich werde es noch einmal versuchen. – Henry

Verwandte Themen