在Emgu CV 2.2(cv AbsDiff)中减去后续帧

时间:2011-03-19 18:28:22

标签: c# emgucv

我一个接一个地使用两个QueryFrame命令来获取帧并使用CvInvoke.cvAbsDiff计算它们的差异。差异图像始终为黑色,尽管我的视频中帧与帧之间存在明显的变化。

我尝试跳过最多五帧(通过使用连续的QueryFrame命令)并始终获得黑框。

如果我均衡两个帧之一的直方图,则AbsDiff会返回结果。因此我假设QueryFrame返回相同的帧。

如何获得两个连续的帧?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

对于评论感到抱歉......我找到了有用的解决方案:

 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();
 }

上面的代码只是为了让您了解它是如何完成的。没有包含异常处理,没有检查,也没有优化。