特定の画像から顔/複数の顔を切り抜いて、切り抜いた顔の画像を他の用途に使用する必要があります。CoreImageのCIDetectorTypeFaceを使用しています。問題は、検出された顔だけを含む新しい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);
}
注:検出された顔の領域を表示するために作成した赤いフレームは、トリミングされた画像とはまったく一致しません。フレームを正しく表示していないのかもしれませんが、フレームを表示する必要がないので、切り抜いた顔が本当に必要です。あまり気にしません。