我正在尝试使用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;
}
}
答案 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
}
}