2016-01-21 20 views
5

Tôi đã triển khai CIDetector trong ứng dụng để phát hiện hình chữ nhật trên hình ảnh, nhưng bây giờ làm cách nào tôi có thể sử dụng hình ảnh trả về để thu nhỏ hình ảnh?Quan điểm CIDetector Và Crop trong Swift

Đối với phối cảnh, tôi đã thử áp dụng bộ lọc CIPerspectiveCorrection, nhưng không thể làm cho bộ lọc hoạt động.

Tôi đã tìm kiếm xung quanh và tìm thấy một số manh mối nhưng không thể tìm thấy giải pháp trong Swift.

Làm cách nào để sử dụng dữ liệu được cung cấp bởi CIDetector (hình chữ nhật được phát hiện) để khắc phục phối cảnh và cắt hình ảnh của tôi?

Đối với bất kỳ ai có thể không quen thuộc với khoản lợi nhuận CIDetectorTypeRectangle: trả về 4 CGPoint 's bottomLeft, bottomRight, topLeft, topRight.

Trả lời

8

Đây là những gì làm việc:

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) 


     ]) 

} 

Bất cứ nơi nào bạn phát hiện hình chữ nhật của bạn:

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() 
Các vấn đề liên quan