2016-06-28 2 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 
관련 문제