很抱歉的评论...这里来了,我认为有用的解决方案:
private Capture myCapture;
private Image<Bgr, Byte> frame1;
private Image<Bgr, byte> frame2;
private void myFunction1()
{
myCapture = new Capture(@"AnyVideoFileName");
frame1 = myCapture.QueryFrame();
}
private void myEventMethod(object sender, EventArgs e)
{
Application.Idle += myFunction2;
}
private void myFunction2(object sender, EventArgs e)
{
frame2 = myCapture.QueryFrame();
Image<Gray, Byte> frame1g = frame1.Convert<Gray,Byte>();
Image<Gray, Byte> frame2g = frame2.Convert<Gray,Byte>();
Image<Gray, Byte> diffFrame = frame2g.Clone();
CvInvoke.cvAbsDiff(frame1g, frame2g, diffFrame);
frame1 = frame2.Clone();
}
上面的代码只是给你的是如何做的想法。没有包含异常处理,没有检查,没有优化。
我发现了一个复杂的解决方案。我使用'QueryFrame'后直接'新Capture'并将其存储在一个成员变量。然后我捕获的方法中的随后的帧,我称之为使用'Application.Idle' – Thanos 2011-03-19 19:54:32
它看起来或多或少类似如下: – Thanos 2011-03-19 19:54:52
'捕获=新捕捉(@“AnyVideoFile”); – Thanos 2011-03-19 19:55:30