我正在使用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;
}
我能否知道如何获得该结果?提前谢谢。
答案 0 :(得分:0)
要计算每次foreach迭代所经过的时间,您可以使用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);
}
类之类的东西。
例如:
{{1}}
答案 1 :(得分:0)
正如我所理解的那样,您希望获得检测到的人数...... 如果是这样,你可以通过
获得它results.Length