Tôi đang cố gắng viết một thường trình lấy UIImage và trả về UIImage mới chỉ chứa khuôn mặt. Điều này có vẻ rất đơn giản, nhưng bộ não của tôi đang gặp phải các vấn đề xung quanh không gian CoreImage vs. UIImage.Phát hiện khuôn mặt UIImage
Dưới đây là những điều cơ bản:
- (UIImage *)imageFromImage:(UIImage *)image inRect:(CGRect)rect {
CGImageRef sourceImageRef = [image CGImage];
CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
CGImageRelease(newImageRef);
return newImage;
}
-(UIImage *)getFaceImage:(UIImage *)picture {
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace
context:nil
options:[NSDictionary dictionaryWithObject: CIDetectorAccuracyHigh forKey: CIDetectorAccuracy]];
CIImage *ciImage = [CIImage imageWithCGImage: [picture CGImage]];
NSArray *features = [detector featuresInImage:ciImage];
// For simplicity, I'm grabbing the first one in this code sample,
// and we can all pretend that the photo has one face for sure. :-)
CIFaceFeature *faceFeature = [features objectAtIndex:0];
return imageFromImage:picture inRect:faceFeature.bounds;
}
Hình ảnh được trả về là từ hình ảnh lộn. Tôi đã thử điều chỉnh faceFeature.bounds
bằng cách sử dụng một cái gì đó như thế này:
CGAffineTransform t = CGAffineTransformMakeScale(1.0f,-1.0f);
CGRect newRect = CGRectApplyAffineTransform(faceFeature.bounds,t);
... nhưng điều đó mang lại cho tôi kết quả bên ngoài hình ảnh.
Tôi chắc chắn có điều gì đó đơn giản để khắc phục điều này, nhưng thiếu tính toán từ dưới xuống và sau đó tạo ra một rect mới bằng cách sử dụng đó như là X, là có một cách "thích hợp" để làm điều này?
Cảm ơn!
Tôi đang nhìn vào cùng một điều, bạn có thể giải thích tính toán bạn đã thực hiện cho trục y không ?. Và 'largeface' là gì? –