2016-06-28 10 views
1

Я реализую систему обнаружения пешеходов, используя библиотеку emgu cv. Метод find Возвращает количество результатов, которые обнаруживаются с помощью метода.Как получить число результатов, возвращающихся с помощью метода поиска в детекторе пешехода EMGU CV 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