2013-04-22 48 views
1

我有一個簡單的代碼,從而在用戶輸入時,相機將捕捉圖像。下面的代碼:OpenCV幀延遲

for (int i=0; i<4; i++){ 
    cvWaitKey(0);       //wait for input then take picture 
    Mat grabbed = cam1.CamCapture(); 
    Image[i].setImage(grabbed.clone()); 
    imshow("picture", Image[i].getImage()); 
    cvWaitKey(1); 
} 

的問題是其中一旦顯示圖像,圖像[i]的顯示圖像意味着圖像[I-1]。

我不明白什麼似乎是問題,因爲我認爲在進入循環時,我將不得不按下一個鍵,然後相機會捕獲一張圖片並將其存儲到第一個對象Image [0]中,並且該過程重複4次。但似乎並非如此。

我有一個使用嵌套循環的解決方法。 int k; (int i = 0; i < 4; i ++){ cvWaitKey(0); //等待輸入,然後拍攝圖片 for(int k = 0; i < 5; k ++)Mat grabbed = cam1.CamCapture(); Image [i] .setImage(grabbed.clone()); } imshow(「picture」,Image [i] .getImage()); cvWaitKey(1); }

這似乎並不是一種有效的方式。我認爲這個問題可能是由於緩衝區問題,但我不太確定。

請指教,謝謝。

回答

0

將您的for循環更改爲do while while循環

int i = 0;

do { 
    cvWaitKey(0);       //wait for input then take picture 
    Mat grabbed = cam1.CamCapture(); 
    Image[i].setImage(grabbed.clone()); 
    imshow("picture", Image[i].getImage()); 
    cvWaitKey(1); 
}while (i<4; i++) 

這是未經測試

+0

請問什麼是這樣做的原因何在呢? – user2148843 2013-04-22 22:52:37

+0

這樣你就可以用i = 0運行代碼至少一次,然後遞增。 – GPPK 2013-04-23 06:17:54