2017-07-18 14 views
0

私は複数の顔を検出し、顔を捕捉して画像として保存するウィンドウアプリケーションを持っています。 EMGU CVを使って顔検出を行い、サンプルコードとチュートリアルから学びます。訓練されたデータセットとして顔をキャプチャする必要がある場合、顔を2つ検出したにもかかわらず1つの顔しか保存できません。コードを修正しようとしましたが、期待通りに動作しないようです。以下のコードです:2つの顔が検出されたが、保存の顔が同じであればEMgucvウェブカメラから検出された複数の顔を保存

gray = grabber.QueryGrayFrame().Resize(320, 240, 
Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); 

MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
      face, 
      1.2, 
      10, 
      Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
      new Size(20, 20)); 

foreach (MCvAvgComp f in facesDetected[0]) 
{ 
    TrainedFace = currentFrame.Copy(f.rect).Convert<Gray, byte>(); 

    TrainedFace = result.Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); 
    trainingImages.Add(TrainedFace); 

    for (int i = 1; i < trainingImages.ToArray().Length + 1; i++) 
    { 
     trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp"); 

    } 
} 

foreachループがループ二回。どんなアイデアが間違っていますか?

答えて

0

検出された顔のそれぞれについて、次のよう

を試してみてください、あなたはトレーニング画像に それを追加する必要があります、あなたはループそれを各ループの

gray = grabber.QueryGrayFrame().Resize(320, 240, 
Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); 

MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
     face, 
     1.2, 
     10, 
     Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
     new Size(20, 20)); 

foreach (MCvAvgComp f in facesDetected[0]) 
{ 
TrainedFace = currentFrame.Copy(f.rect).Convert<Gray, byte>(); 

TrainedFace = result.Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); 
trainingImages.Add(TrainedFace); 
} 

for (int i = 1; i < trainingImages.ToArray().Length + 1; i++) 
{ 
    trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp"); 

} 

の側面をする必要があり私は、forループ

int i=1; 
foreach(TrainedFace Tface in trainingImages) 
    { 
    Tface.Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp") 
    i++; 
    } 

に変更することができると思い

...それがうまくいくかもしれない、この方法を試してみてください。 10
+0

私は同じことをやってみました。カメラには2つの異なる顔が検出され、2つの赤い矩形が描かれています。 foreachは2回ループしますが、同じ面を保存します。 –

関連する問題