2013-04-22 119 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