测得的 fps 高于理论 fps

  • 本文关键字:fps 高于 理论 c++ time
  • 更新时间 :
  • 英文 :


我正在C++测量图像处理程序中几个函数的执行时间。特别是,我希望有使用USB相机捕获帧的实际执行时间。

问题在于结果似乎与相机参数不一致:相机最多应该是 30 fps,而且我经常得到一个小于 33 毫秒的测量时间以获得帧,这是我认为应该预期的值。例如,我得到很多 12 毫秒的间隔,但这似乎真的太少了。

这是代码:

#include <time.h>
#include <sys/time.h>
double get_wall_time(){
    struct timeval time;
    if (gettimeofday(&time,NULL)){
        //  Handle error
        return 0;
    }
    return (double)time.tv_sec + (double)time.tv_usec * .000001;
}
int main(){
    while (true) {
      double previoustime = get_wall_time();
      this->camera.readFrame();
      double currenttime = get_wall_time();
      std::cout << currenttime-previoustime << std::endl;
      // Other stuff
      // ...
      // ...
      usleep(3000);
    }
}

正如@Revolver_Ocelot所说,您正在测量从get_wall_time结束到另一个类似调用结束所花费的时间。要修复代码,请执行以下操作:

double currenttime = get_wall_time();    
while (true) {
    double previoustime = currenttime;
    this->camera.readFrame();
    ... 
    currentime = get_wall_time();
}

你能发现区别吗?此代码测量每次传递之间的间隔,这是您希望每秒获取的帧数。

读取相机的速度与

读取新帧的速度不同。您的相机可能以 30 FPS 的速度录制,而您可以以 15 FPS 或 90 FPS 的速度读取它,从而对帧流进行子采样或过采样。

您可以过采样的限制是读取图像并存储图像所需的 1 次/时间。

这就是@Jacob Hull所说的阻塞;如果readFrame只是读取最后一帧,那么直到新帧才会阻塞,你会得到结果,就像你测量一样。

最新更新