5

これは私が試したかなり標準的なコードです。私がやろうとしているのは、非常に安定したポートレート画像に 2 つの眼球と 1 つの口を配置することです。これが私が試したことです:

 CIImage *image = [CIImage imageWithCGImage: [tim.image CGImage]];

CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options: [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey: CIDetectorAccuracy]];

NSArray *feats = [detector featuresInImage: image];

for (CIFaceFeature *faceFeature in feats) {

    if (faceFeature.hasLeftEyePosition) {

        eyeLeft.center = faceFeature.leftEyePosition;
    }

    if (faceFeature.hasRightEyePosition) {

        eyeRight.center = faceFeature.rightEyePosition;
    }

    if (faceFeature.hasMouthPosition) {

        moth.center = faceFeature.mouthPosition;
    }
}

問題は、私の画像が中心を移動しますが、非常にぎこちない位置に移動することです (別名、正しい位置ではありません)! 正しい距離関係で表示されますが、口が上にあることを除きます。これが意味することは、次のようなものがあるということです:

上に口、数センチ下に数センチ離れた2つの眼球があります。したがって、それらは画像ビューに従って正しくスケーリングされますが、間違った場所にあるだけです

4

2 に答える 2

10

CIImageUIImage座標系は逆なので、座標を変換する必要があります。例えば:

CGPoint ciMmouthCenter = faceFeature.mouthPosition;
CGPoint uiMmouthCenter;
uiMouthCenter.x = tim.image.size.width - ciMouthCenter.x;
uiMouthCenter.y = tim.image.size.height - ciMouthCenter.y;
于 2012-06-15T11:58:46.900 に答える
2

Apple の「SquareCam」アプリを使用する必要があります。前面カメラと背面カメラの向きに関係なく、正しい位置に正方形を配置します。私のアプリでは、「faceRect」を決定する「SquareCam」からコードを取り除いただけです。mouthPosition については、x 値と y 値のパーセンテージを faceRect に沿って補間しました。

于 2013-05-21T22:06:11.623 に答える