2016-06-28 12 views
1

emgu cv libraryを使用して歩行者検出システムを実装しています。 findメソッドメソッドを通じて検出された結果の数を返します。EMGU CV歩行者検出でFindメソッドから返される結果の数を取得する方法C#

public static Rectangle[] findPedestrian(Image<Bgr, Byte> image) 
{ 
    Stopwatch stopwatch; 
    Rectangle[] regions; 
    if (CudaInvoke.HasCuda) 
    { 
     using (CudaHOG des = new CudaHOG(new Size(64, 128), new Size(16, 16), new Size(8, 8), new Size(8, 8))) 
     { 
      des.SetSVMDetector(des.GetDefaultPeopleDetector()); 
      stopwatch = Stopwatch.StartNew(); 
      using (GpuMat cudaBgr = new GpuMat(image)) 
      using (GpuMat cudaBgra = new GpuMat()) 
      using (VectorOfRect vr = new VectorOfRect()) 
      { 
       CudaInvoke.CvtColor(cudaBgr, cudaBgra, ColorConversion.Bgr2Bgra); 
       des.DetectMultiScale(cudaBgra, vr); 
       regions = vr.ToArray(); 
      } 
     } 
    } 
    else 
    { 
     using (HOGDescriptor des = new HOGDescriptor()) 
     { 
      des.SetSVMDetector(HOGDescriptor.GetDefaultPeopleDetector()); 
      stopwatch = Stopwatch.StartNew(); 
      MCvObjectDetection[] results = des.DetectMultiScale(image); 
      regions = new Rectangle[results.Length]; 
      for (int i = 0; i < results.Length; i++) 
       regions[i] = results[i].Rect; 
      stopwatch.Stop(); 
     } 
    } 
    //processingTime = stopwatch.ElapsedMilliseconds; 
    return regions; 
} 

ここでは、プロセスを送信する結果に応じて長方形が生成されます。私が望むのは、メソッドを返す結果の数を数えることです。私はこのforeachループの繰り返しの数からそれを得ると思った。

private Image<Bgr, Byte> imagingPedestrian(Image<Bgr, Byte> image) 
{ 
    System.Drawing.Rectangle[] results = pedestrianDetection.findPedestrian(image); 
    foreach (Rectangle rect in results) 
    { 
     CvInvoke.Rectangle(image, rect, new Bgr(Color.Red).MCvScalar); 
    } 
    return image; 
} 

私はその結果を得る方法を知ることができますか?前もって感謝します。

+0

ことによってそれを得ることができるので、 results.countまたはresults.lengthはうまくいくはずです –

+0

私はタイトルと質問で混乱しています。タイトルは何かがどれくらい時間がかかるかを測定することですが、関数が何回呼び出されたかのように思えます。どちらですか? – Neil

+0

タイトルが質問に一致しません。 – chris579

答えて

0

各foreach反復で経過した時間をカウントするには、System.Diagnostics.Stopwatchクラスのようなものを使用できます。例えば

Stopwatch sw = new Stopwatch(); 
foreach(var myVar in myCollection) 
{ 
    sw.Restart(); 

    /* 
    * your iteration code... 
    */ 

    sw.Stop(); 
    var timestampString = string.Format("{0}:{1}:{2}", sw.Elapsed.Hours.ToString("00"), sw.Elapsed.Minutes.ToString("00"), sw.Elapsed.Seconds.ToString("00")); 
    Console.WriteLine("Elapsed time: {0}", timestampString); 
} 
+0

彼は結果を数えるか、時間を測定したい場合は明確ではない – chris579

+0

同意...私はチャンスを取った:) – Veverke

+0

いいえ私は、foreachループが与えられたケース内で何度反復されたかを知りたいのです。 –

0

私はあなたが検出された人の数を取得したい質問を理解できるように... 場合、私が正しく理解場合は

results.Length 
関連する問題