我的申请有些问题。继承人我有网络摄像头将图片输入功能,计算是否有任何动作和位置。但问题是(我的观点),来自相机的新帧所引发的事件往往是代码没有时间完成。所以,如果这是我的代码,我可以在哪里放置一些信号量或其他东西:(我尝试了许多事情,没有任何事情):
private void button1_Click(object sender, EventArgs e)
{
FinalVideoSource = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
FinalVideoSource.NewFrame += new NewFrameEventHandler(FinalVideoSource_NewFrame);
FinalVideoSource.Start();
ImageEfects.drawGrid(detectionImage, 40);
}
public void FinalVideoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
image = (Bitmap)eventArgs.Frame.Clone();
#region demoInit
if (initalization)
{
image1 = image;
initalization = false;
}
#endregion demoInit
ImageProcessing.calculateDiferences(ref image, ref image1, ref detectionImage);
screen1.Image = image;
screen2.Image = detectionImage;
}
答案 0 :(得分:0)
只是不要比较每一帧。我会存储一个帧,而不是等待(计数)指定数量的帧,而不是比较当前帧和存储的帧(在一个单独的线程中)。并存储当前帧以供下次比较。
等待的帧数取决于你,这取决于你可以忽略一个运动的时间段。
答案 1 :(得分:0)
我会在FinalVideoSource_NewFrame
的开头设置一个标志,如果设置将让函数返回。在FinalVideoSource_NewFrame
的开头和结尾切换此标记。这样,如果计算周期花费的时间更长,你就永远不会进入队列。