2016-06-28 49 views
1

我正在實施使用emgu cv庫的行人檢測系統。 find方法返回通過方法檢測的結果的數量。如何獲取通過EMGU中的查找方法返回的結果數簡歷行人檢測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

要計算每次迭代所用的時間,可以使用類似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 
相關問題