1
動き検出にAForgeを使用していますが、動き領域を設定できることがわかりました。動きがある場合にのみトリガーするようにすることは可能ですかすべての定義済み領域? 上記の機能をすぐに利用できない場合は、私はそれを書くことを考えています。Aforge.Netの動き検出領域
現在のところ、リージョンはVision LibraryのMotionDetector.csのzoneFrameに設定されています。私は各地域でこれを行うことを考えていますが、それは効率的ではないようです。
これを行う最も効率的な方法は何ですか?
誰か私に以下のコードを説明してもらえますか?
private unsafe void CreateMotionZonesFrame()
{
lock (this)
{
// free previous motion zones frame
if (zonesFrame != null)
{
zonesFrame.Dispose();
zonesFrame = null;
}
// create motion zones frame only in the case if the algorithm has processed at least one frame
if ((motionZones != null) && (motionZones.Length != 0) && (videoWidth != 0))
{
zonesFrame = UnmanagedImage.Create(videoWidth, videoHeight, PixelFormat.Format8bppIndexed);
Rectangle imageRect = new Rectangle(0, 0, videoWidth, videoHeight);
// draw all motion zones on motion frame
foreach (Rectangle rect in motionZones)
{
//Please explain here
rect.Intersect(imageRect);
// rectangle's dimenstion
int rectWidth = rect.Width;
int rectHeight = rect.Height;
// start pointer
//Please explain here
int stride = zonesFrame.Stride;
//Please explain here
byte* ptr = (byte*) zonesFrame.ImageData.ToPointer() + rect.Y * stride + rect.X;
for (int y = 0; y < rectHeight; y++)
{
//Please explain here
AForge.SystemTools.SetUnmanagedMemory(ptr, 255, rectWidth);
ptr += stride;
}
}
}
}
}