3
    UIImage* image = [UIImage imageNamed:@ "face.png" ];  
    UIImageView testImage = [[UIImageView alloc] initWithImage: image];  
    [testImage setTransform:CGAffineTransformMakeScale(1, -1)];  
    [[[UIApplication sharedApplication] delegate].window setTransform:  
CGAffineTransformMakeScale(1, -1)];  
    [testImage setFrame:CGRectMake(0, 0, testImage.image.size.width,  
testImage.image.size.height)];  
    [self.view addSubview:testImage];  

    CIImage* ciimage = [CIImage imageWithCGImage:imag​​e.CGImage];  
    NSDictionary* opts = [NSDictionary dictionaryWithObject:  
CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];  
    CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace  
context:nil options:opts];  
    NSArray* features = [detector featuresInImage:ciimage];  

    for  (CIFaceFeature *faceFeature in features)
    {  

        CGFloat faceWidth = faceFeature.bounds.size.width;  

        UIView* faceView = [[UIView alloc] initWithFrame:faceFeature.bounds];                    

        faceView.layer.borderWidth = 1;  
        faceView.layer.borderColor = [[UIColor redColor] CGColor];  

        [self.view addSubview:faceView];          
    }  

どうすれば顔の座標を見つけることができますか?

使ってみfacefeature.bounds.origin.xfacefeature.bounds.origin.y

しかし時々、それは正しい座標ではありません

どうすれば座標を見つけることができますか?

------------------ 2016/04/10------------------これは私の問題ですiosx、yはC#の反対

4

1 に答える 1

2

その背後にある基本的な考え方は次のとおりです。CIDetectorを使用すると、画像から左目、右目、口のポイントを推定できます。そこから、いくつかの基本的な計算を行って、これらの点の間にまたがる長方形を作成できます。

for  (CIFaceFeature *faceFeature in features)
{
    CGPoint lefteye = faceFeature.leftEyePosition;
    CGPoint righteye = faceFeature.rightEyePosition;
    CGPoint mouth = faceFeature.mouthPosition;
    //Face Rectangle
    CGRect faceRectangle = CGRectMake(lefteye.x, lefteye.y, righteye.x - lefteye.x, mouth.y - righteye.y);
    //Face Center
    CGPoint faceCenter = CGPointMake(faceRectangle.origin.x + (faceRectangle.size.width / 2), faceRectangle.origin.y + (faceRectangle.size.height / 2));
    UIView* faceView = [[UIView alloc] initWithFrame:faceRectangle];

    faceView.layer.borderWidth = 1;
    faceView.layer.borderColor = [[UIColor redColor] CGColor];

    [self.view addSubview:faceView];          
}

私は現在、関数のこの部分をテストするためにコンピューターを使用していませんが、検出器によって出力される座標は入力画像の解像度に忠実であると信じています。これにより、iOSのポイント座標系を使用して画面上のビューにcreaterectを適用しようとすると不正確になります。これは、あなたがしなければならないのはconvertRect、適切な座標を取得するために関数を介して新しく作成された長方形を実行することだけだと言われています。

于 2012-10-23T20:59:58.093 に答える