EMGU CV行人检测c#中如何通过Find方法获取返回结果的个数

本文关键字:返回 获取 方法 结果 Find 何通过 CV 检测 EMGU | 更新日期: 2023-09-27 17:52:16

我正在使用emgu cv库实现行人检测系统。find方法返回通过该方法检测的结果的数目。

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;
}

我能知道得到那个结果的方法吗?

EMGU CV行人检测c#中如何通过Find方法获取返回结果的个数

要计算每次迭代所花费的时间,您可以使用类似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);
}

根据我的理解,您想要获得检测到的人数…如果有,可以通过

获取
results.Length