Обрезка лица с помощью CoreImage

Мне нужно вырезать лицо/несколько лиц из данного изображения и использовать обрезанное изображение лица для других целей. Я использую CIDetectorTypeFace от CoreImage. Проблема заключается в том, что новый UIImage, содержащий только обнаруженное лицо, должен быть больше по размеру, так как волосы обрезаны или отрезана нижняя челюсть. Как увеличить размер initWithFrame:faceFeature.bounds ?? Пример кода, который я использую:

    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);
    }

Примечание. Красная рамка, которую я сделал, чтобы показать обнаруженную область лица, совсем не совпадает с обрезанным изображением. Может быть, я неправильно показываю рамку, но поскольку мне не нужно показывать рамку, мне действительно нужно обрезанное лицо, я не слишком беспокоюсь об этом.


person Soumyajit    schedule 24.02.2013    source источник


Ответы (1)


Не уверен, но можно попробовать

CGRect biggerRectangle = CGRectInset(faceFeature.bounds, someNegativeCGFloatToIncreaseSizeForXAxis, someNegativeCGFloatToIncreaseSizeForYAxis);
CGImageRef imageRef = CGImageCreateWithImageInRect([staticBG.image CGImage], biggerRectangle);

https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CGGeometry/Reference/reference.html#//apple_ref/c/func/CGRectInset

person blub    schedule 24.02.2013
comment
Большое спасибо... Это сработало! Я также использовал CGRectOffset, чтобы сделать его более точным. :) - person Soumyajit; 24.02.2013