5

这只是我尝试过的一些非常标准的代码。我要做的是将两个眼球和一张嘴放在一个非常稳定的肖像图像上。这是我尝试过的:

 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;
    }
}

问题是我的图像确实翻译了它们的中心,但是到了一个非常尴尬的位置(AKA 不是正确的位置)!尽管它们确实以正确的距离关系出现,但嘴在顶部。这意味着有:

上面有一张嘴,下面几厘米有两个相隔几厘米的眼球。所以它们根据图像视图正确缩放,它们只是在错误的地方

4

2 回答 2

10

CIImage坐标系UIImage是逆的,所以你必须翻译坐标。例如:

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

您应该使用苹果的“SquareCam”应用程序。它将一个正方形放置在任何方向的前后摄像头的正确位置。对于我的应用程序,我只是从确定“faceRect”的“SquareCam”中删除了代码。对于mouthPosition,我沿 faceRect 插入 x 值和 y 值的百分比。

于 2013-05-21T22:06:11.623 回答