很抱歉的評論...這裏來了,我認爲有用的解決方案:
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