6

ここのコードを使用して 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 です。2 つのステートメントの位置を交換すると、eyes.size() = 2 と faces.size() = 0 が得られます。

4

3 に答える 3

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 は使用していませんが、無料で口の位置を取得できます。

于 2013-02-02T21:48:54.407 に答える
0

共有入力パラメーターをコピーするだけ、つまり mat を mat2 にコピーし、それを 2 番目の入力として使用するのが論理的です。

于 2013-01-25T14:56:07.070 に答える
0

変数 mat は配列であり、値によって渡されます。関数内では、マット内の値が変更されるため、最初に配置したステートメントは適切に実装され、2 番目のステートメントではどのマットが変更されます。そのため、いずれかのステートメントの前に変数 mat のディープ コピーを作成し、2 番目のステートメントの mat の代わりに mat-copy variable を使用します。

于 2013-01-28T20:17:35.247 に答える