2016-01-21 3 views
5

Я применил CIDetector в своем приложении, чтобы обнаружить прямоугольники на изображении, но теперь, как я могу использовать возвращенный CGPoint, чтобы обрезать изображение, чтобы я мог его отобразить?CIDetector Perspective and Crop in Swift

Для перспективы я попытался применить фильтр CIPerspectiveCorrection, но не смог заставить его работать.

Я искал вокруг и нашел некоторые подсказки, но не смог найти решение в Swift.

Как использовать данные, предоставленные CIDetector (обнаруженный прямоугольник), чтобы исправить перспективы и обрезать изображение?

Для тех, кто может быть не знаком с тем, что возвращает CIDetectorTypeRectangle: он возвращает 4 нижний правый, нижний правый, topLeft, topRight.

ответ

8

Вот что работал:

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) 


     ]) 

} 

Где бы вы обнаружить прямоугольник:

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