私はUIImageを取り、面だけを含む新しいUIImageを返すルーチンを作成しようとしています。これは非常に簡単なようですが、私の脳はCoreImageとUIImageの空間を巡って問題を抱えています。ここでUIImage顔検出
は基本だ:
- (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;
}
返された画像が反転した画像からです。私はこのような何か使用してfaceFeature.bounds
を調整しようとしました:
CGAffineTransform t = CGAffineTransformMakeScale(1.0f,-1.0f);
CGRect newRect = CGRectApplyAffineTransform(faceFeature.bounds,t);
を...それは私のイメージ外の結果を提供します。
私はこの問題を解決するための簡単な何かがありますことを確認、しかし下のダウンを計算して、Xとして、これを行うには、「適切な」方法があることを使用して、新しい矩形を作成するための短いんですか?
ありがとうございます!これを達成する簡単な方法はありません
私は同じことを考えています。あなたがy軸に対して行った計算を教えてください。そして、「最大面」とは何ですか? –