I have found a solution!
func cropBusinessCardForPoints(image: CIImage, topLeft: CGPoint, topRight: CGPoint, bottomLeft: CGPoint, bottomRight: CGPoint) -> CIImage { var businessCard: CIImage businessCard = image.imageByApplyingFilter("CIPerspectiveTransformWithExtent", withInputParameters: [ "inputExtent": CIVector(CGRect: image.extent()), "inputTopLeft": CIVector(CGPoint: topLeft), "inputTopRight": CIVector(CGPoint: topRight), "inputBottomLeft": CIVector(CGPoint: bottomLeft), "inputBottomRight": CIVector(CGPoint: bottomRight) ]) businessCard = image.imageByCroppingToRect(businessCard.extent()) return businessCard }
Using:
When a rectangle is found:
//... let businessCardImage = cropBusinessCardForPoints(image, topLeft: feature.topLeft, topRight: feature.topRight, bottomLeft: feature.bottomLeft, bottomRight: feature.bottomRight) //Convert CIImage to CGImage let cgimg = context.createCGImage(businessCardImage, fromRect: businessCardImage.extent()) //Convert CGImage to UIImage let newImage = UIImage(CGImage: cgimg, scale:1, orientation: orientation)
source share