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