Мне нужно обрезать лицо/несколько лиц из заданного изображения и использовать обрезанное изображение лица для другого использования. Я использую CIDetectorTypeFace от CoreImage. Проблема в том, что новый UIImage, содержащий только обнаруженное лицо, должен быть больше по размеру, поскольку волосы отсечены или нижняя челюсть отключена. Как увеличить размер initWithFrame:faceFeature.bounds
? Пример код я использую:Обрезка лица с помощью CoreImage
CIImage* image = [CIImage imageWithCGImage:staticBG.image.CGImage];
CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace
context:nil options:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]];
NSArray* features = [detector featuresInImage:image];
for(CIFaceFeature* faceFeature in features)
{
UIView* faceView = [[UIView alloc] initWithFrame:faceFeature.bounds];
faceView.layer.borderWidth = 1;
faceView.layer.borderColor = [[UIColor redColor] CGColor];
[staticBG addSubview:faceView];
// cropping the face
CGImageRef imageRef = CGImageCreateWithImageInRect([staticBG.image CGImage], faceFeature.bounds);
[resultView setImage:[UIImage imageWithCGImage:imageRef]];
CGImageRelease(imageRef);
}
Примечания: красная рамка, что я сделал, чтобы показать обнаруженную область лица делает, не совсем совпадает с обрезанными изображениями. Может быть, я не показываю рамку правильно, но так как мне не нужно показывать фрейм, мне действительно нужно обрезанное лицо, я не беспокоюсь об этом.
Спасибо большое ... Это сработало! Я также использовал CGRectOffset, чтобы сделать его более точным. :) – Soumyajit
Добро пожаловать! Если ответ решит вашу проблему, пожалуйста, подумайте о его маркировке как принятой (галочка с левой стороны). – blub