2016-01-21 11 views
5

Zaimplementowałem w mojej aplikacji CIDetector do wykrywania prostokątów na obrazie, ale teraz jak mogę użyć zwróconego CGPoint, aby przyciąć obraz, aby móc go wyświetlić?CIDetector Perspective And Crop in Swift

Dla perspektywy próbowałem zastosować filtr CIPerspectiveCorrection, ale nie mogłem go uruchomić.

Szukałem i znalazłem kilka wskazówek, ale nie mogłem znaleźć rozwiązania w Swift.

Jak wykorzystać dane dostarczone przez CIDetector (wykryty prostokąt), aby poprawić perspektywę i przyciąć mój obraz?

Dla każdego, kto może nie wiedzieć, co zwraca CIDetectorTypeRectangle: zwraca 4 CGPoint 's bottomLeft, bottomRight, topLeft, topRight.

Odpowiedz

8

Oto co pracował:

func flattenImage(image: CIImage, topLeft: CGPoint, topRight: CGPoint,bottomLeft: CGPoint, bottomRight: CGPoint) -> CIImage { 

    return image.applyingFilter("CIPerspectiveCorrection", withInputParameters: [ 

     "inputTopLeft": CIVector(cgPoint: topLeft), 
     "inputTopRight": CIVector(cgPoint: topRight), 
     "inputBottomLeft": CIVector(cgPoint: bottomLeft), 
     "inputBottomRight": CIVector(cgPoint: bottomRight) 


     ]) 

} 

Gdziekolwiek wykryć prostokąt:

UIGraphicsBeginImageContext(CGSize(width: flattenedImage!.extent.size.height, height: flattenedImage!.extent.size.width)) 

UIImage(ciImage:resultImage!,scale:1.0,orientation:.right).draw(in: CGRect(x: 0, y: 0, width: resultImage!.extent.size.height, height: resultImage!.extent.size.width)) 

let image = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext()