C ++时间函数在不同的调用

时间:2015-05-09 23:38:50

标签: c++ opencv time

我正在尝试使用C ++中的时间函数获取网络摄像头的fps。我正在使用opencv库。对于每100帧,我计算fps,所以我确信至少已经过了1-2秒。然而,它似乎没有工作,因为difftime()返回0.当我调试代码时,我发现开始和结束时间值都是相同的。有人可以帮我解决这个问题吗?以下是我的代码:

int frameCount = 0;
double seconds;
time_t start,end;
double fps;
for(;;){
    start = time(NULL);
    cap >> src;
    if (!src.empty()) {
        frameCount++;
    }
    if(frameCount == 100){
        end = time(NULL);
        seconds = difftime(end, start); //start and end has same value
        fps = frameCount / seconds;
        frameCount = 0;
    }
}

2 个答案:

答案 0 :(得分:4)

您正在每次迭代开始时录制start。如果每100次迭代记录end并不重要,因为start值是当前帧中的值。

start的初始化移至循环外部,并将其添加到每100帧检查的末尾。

start = time(NULL);
for(;;){
    cap >> src;
    //...
    if(frameCount == 100){
        end = time(NULL);
        //...
        frameCount = 0;
        start = time(NULL);
    }
}

答案 1 :(得分:1)

为什么将frameCount与100进行比较?如果你只需要fps,我认为没有充分的理由。

    start = time(NULL); // -> it needs to be initialized outside the loop, otherwise, it will always be equal to end
    for (;;){

        cap >> src;
        if (!src.empty()) {
            frameCount++;
        }

        end = time(NULL);
        seconds = difftime(end, start); 

        if (seconds != 0)
        { 
            fps = frameCount / seconds;
            frameCount = 0;
            start = time(NULL); // -> reset here the start time
        }
    }