【问题标题】:Subtraction of subsequent frames in EmguCV 2.2 (cvAbsDiff)EmguCV 2.2 (cvAbsDiff) 中后续帧的减法
【发布时间】:2011-03-20 04:05:10
【问题描述】:

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

我尝试跳过最多五帧(通过使用连续的QueryFrame 命令)并且总是得到一个黑帧。

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

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

【问题讨论】:

  • 我找到了一个复杂的解决方案...我在new Capture 之后直接使用QueryFrame 并将其存储在成员变量中。然后我在一个方法中捕获后续帧,我使用 Application.Idle 调用该方法
  • 它看起来或多或少像下面这样:
  • `capture = new Capture(@"AnyVideoFile");

标签: c# emgucv


【解决方案1】:

对 cme​​ts 感到抱歉...这是我发现有用的解决方案:

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

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

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多