C++ 时间函数 returns 不同调用时的相同值

C++ time function returns same value at different calls

我正在尝试使用 C++ 中的时间函数获取网络摄像头的 fps。我正在使用 opencv 库。我每 100 帧计算一次 fps,因此我确信至少经过了 1-2 秒。但是,它似乎不起作用,因为 difftime() returns 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;
    }
}

您在每次迭代开始时记录 start。如果您每一百次迭代记录 end 并不重要,因为 start 值是来自当前帧的值。

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

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

为什么要将 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
        }
    }