面部跟踪器找到眼睛iphone

时间:2013-01-25 14:37:06

标签: ios objective-c opencv face-detection

我用the code from here找到了Face。我试图画出眼睛和脸。 但我只能根据我先写的哪个陈述来显示眼睛或脸部。怎么做?

// Detect faces
std::vector faces;
_faceCascade.detectMultiScale(mat, faces, 1.1, 2, kHaarOptions, cv::Size(60, 60));
//Detect eyes
std::vector eyes;
_eyesCascade.detectMultiScale(mat, eyes, 1.1, 2, kHaarOptions, cv::Size(30, 30));

这里eyes.size()= 0.如果我互换两个语句的位置,我得到eyes.size()= 2和faces.size()= 0

3 个答案:

答案 0 :(得分:14)

如果您的目标是检索iOS上的面部和眼睛位置,为什么不使用CoreImage功能?

CIImage *image = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:@"image.jpg"]];

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:CIDetectorAccuracyHigh, CIDetectorAccuracy, nil];

CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:options];

NSArray *features = [faceDetector featuresInImage:image];
for(CIFaceFeature* faceFeature in features)
{
    CGRect faceSize = faceFeature.bounds.size;
    PointF leftEyePosition;
    PointF rightEyePosition;
    PointF mouthPosition;

    if(faceFeature.hasLeftEyePosition)
        leftEyePosition = faceFeature.leftEyePosition;
    //do the same for right eye and mouth
}

它不使用OpenCV,但你可以免费获得口位。

答案 1 :(得分:0)

仅复制共享输入参数即将mat复制到mat2并将其用作第二个输入是合乎逻辑的。

答案 2 :(得分:0)

变量mat是一个数组,按值传递。在函数内部,mat内部的值发生变化,因此您先放置的任何语句都会正确实现,而第二个语句的mat更改。因此,在任一语句之前创建变量mat的深层副本,并在第二个语句中使用mat-copy变量代替mat。