我希望那个帧每秒都能得到。 (OpenCV的)

时间:2016-10-04 04:52:37

标签: opencv

我希望结果是这个代码被执行时,我每秒获得一帧。

但也许存在上限缓冲区,所以我不会获得帧截止。

这个框架是连续的。

我想获得一帧,1秒后获得帧(1秒后帧)

有什么问题?

VideoCapture cap(0) ;
while(1){
    cap >> frame ;
    sleep(1) ;
    imshow("test", frame) ;
    if(waitKey(30)>=0) break ;
}

1 个答案:

答案 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 ;
}