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

时间:2012-06-24 18:32:00

标签: c++ opencv

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

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?感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过查询捕获界面来检索实际的FPS of the video

double fps = capture.get(CV_CAP_PROP_FPS);

您还可以使用CV_CAP_PROP_FRAME_COUNT发现视频中的总帧数。

使用该信息,您可以进行简单的计算,并找出延迟的确切时间。