我希望结果是这个代码被执行时,我每秒获得一帧。
但也许存在上限缓冲区,所以我不会获得帧截止。
这个框架是连续的。
我想获得一帧,1秒后获得帧(1秒后帧)
有什么问题?
VideoCapture cap(0) ;
while(1){
cap >> frame ;
sleep(1) ;
imshow("test", frame) ;
if(waitKey(30)>=0) break ;
}
答案 0 :(得分:0)
这很棘手,因为缓冲区不允许您使用waitKey跳过帧...这意味着您当前的代码将等待您指定的时间,然后显示立即下一帧,而不是延迟后的那个。
但是,如果您希望显示仅在t = {1sec,2sec ...}时出现的帧,则可以使用getTickCount()和getTickFrequency()函数自行生成计时器,如下所示: / p>
VideoCapture cap(0) ;
int t=getTickCount()/getTickFrequency();//at the starting of loop
while(1){
cap >> frame ;
//sleep(1);
if(getTickCount()/getTickFrequency()-t>=1000){//in milliseconds
//here getTickCount() is constantly updated, but t is fixed till you reset it
imshow("test", frame) ;
t=getTickCount()/getTickFrequency();//reset the difference back to 0
}
if(waitKey(30)>=0)
break ;
}