減法

2011-03-19 28 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(); 
} 

上面的代碼只是給你的是如何做的想法。沒有包含異常處理,沒有檢查,沒有優化。