如何为 waitKey() 动态分配延迟值,以便我获得正确的 fps

How to dynamically assign delay value for waitKey() so I get the correct fps?

本文关键字:fps waitKey 延迟 动态分配      更新时间:2023-10-16

我有一个视频,我想处理帧。

VideoCapture capture("movie.mpg");
while(true) {
  Mat frame;
  capture >> frame;
  // This may take some time to finish
  processFrame(frame);
  if (waitKey(80) == 'q')
    break;
}

问题是,使用硬编码延迟waitKey(80)将导致视频的 fps 不正确。例如,上面的代码尝试以每秒 12 帧的速度显示视频,但如果processFrame()需要一些时间才能完成,则 fps 会更低,并且视频看起来滞后。

我需要在这里对延迟值进行一些计算。如何动态分配值,使 fps 保持在 12?谢谢。

您可以通过查询捕获接口来检索视频的实际 FPS:

double fps = capture.get(CV_CAP_PROP_FPS);

您还可以使用 CV_CAP_PROP_FRAME_COUNT .

有了这些信息,您可以进行简单的计算并找出延迟的确切时间。