如何将帧输入运动检测器对象AForge.net?
问题描述:
我正在尝试使用AForge.net框架来获得一个简单的运动检测程序。在AForge网站是这样一个程序的例子,但它是相当含糊:如何将帧输入运动检测器对象AForge.net?
// create motion detector
MotionDetector detector = new MotionDetector(
new SimpleBackgroundModelingDetector(),
new MotionAreaHighlighting());
// continuously feed video frames to motion detector
while (...)
{
// process new video frame and check motion level
if (detector.ProcessFrame(videoFrame) > 0.02)
{
// ring alarm or do something else
}
}
我需要一些帮助,while循环的条件,因为我找不到怎么养活视频帧的解决方案到MotionDetector对象中。
谢谢。
答
你会想要利用AForge的DirectShow VideoInputDevice。而不是一个while循环,你将有一个NewFrame事件来控制运动检测器。
首先,您需要引用:
using AForge.Video.DirectShow;
using AForge.Video;
using AForge.Vision.Motion;
using System.Drawing;
接下来,您将需要获得例如您的捕获设备您的摄像头,并添加一个新的帧事件处理程序newFrame的事件为设备:
Cameras = new FilterInfoCollection(FilterCategory.VideoInputDevice);
VideoCaptureDevice Camera = new VideoCaptureDevice(Cameras[0].MonikerString);
Camera.NewFrame += new NewFrameEventHandler(ProcessNewFrame);
但是现在你选择,你可以实现NewFrameEventHandler:
private void ProcessNewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap frame = (Bitmap) eventArgs.Frame.Clone();
if (detector.ProcessFrame(frame) > 0.02)
{
// ring alarm or do somethng else
}
}
让我知道如果你需要更多的援助。我刚刚完成了一个基于AForge的运动跟踪器项目。 – Iridium237