减法

2011-03-19 22 views
0

我使用两个QueryFrame命令一前一后,得到的帧和使用CvInvoke.cvAbsDiff计算它们的差。差异图片始终是黑色的,尽管在我的视频中每帧之间都有可见的变化。减法

我试图(通过使用连续QueryFrame命令)和总是得到一个黑色跳帧最多五个帧。

如果我均衡两帧之一的柱状图中,AbsDiff不会返回结果。因此,我假定QueryFrame返回相同的帧。

我怎样才能获得两个连续的帧?有任何想法吗?

+0

我发现了一个复杂的解决方案。我使用'QueryFrame'后直接'新Capture'并将其存储在一个成员变量。然后我捕获的方法中的随后的帧,我称之为使用'Application.Idle' – Thanos 2011-03-19 19:54:32

+0

它看起来或多或少类似如下: – Thanos 2011-03-19 19:54:52

+0

'捕获=新捕捉(@“AnyVideoFile”); – Thanos 2011-03-19 19:55:30

回答

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

上面的代码只是给你的是如何做的想法。没有包含异常处理,没有检查,没有优化。