1

特定の画像から顔/複数の顔を切り抜いて、切り抜いた顔の画像を他の用途に使用する必要があります。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);
    }

注:検出された顔の領域を表示するために作成した赤いフレームは、トリミングされた画像とはまったく一致しません。フレームを正しく表示していないのかもしれませんが、フレームを表示する必要がないので、切り抜いた顔が本当に必要です。あまり気にしません。

4

1 に答える 1

5

わかりませんが、試すことができます

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

于 2013-02-24T15:12:33.533 に答える