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;
}
私はその結果を得る方法を知ることができますか?前もって感謝します。
ことによってそれを得ることができるので、 results.countまたはresults.lengthはうまくいくはずです –
私はタイトルと質問で混乱しています。タイトルは何かがどれくらい時間がかかるかを測定することですが、関数が何回呼び出されたかのように思えます。どちらですか? – Neil
タイトルが質問に一致しません。 – chris579