如何使用Chrono和OpenCV计算实时视频流的FPS?

时间:2016-10-10 23:37:10

标签: c++ opencv chrono

有一段时间我一直在尝试计算通过 OpenCV 程序传输的视频流的FPS,并想知道是否有任何方法可以使用< em> Chrono 而不是 time.h 或任何其他使用CPU滴答测量的API。经过大量的实验和研究,我还没有找到一个使用 Chrono 的简单解决方案。

使用 Chrono 计算您的FPS是否存在Keep-It-Simple-Stupid解决方案?或者正在使用CPU滴答不可避免?

1 个答案:

答案 0 :(得分:1)

你有方法

VideoCapture::get(CV_CAP_PROP_FPS) 它不起作用吗?

据我所知,计时方法仍然会使用CPU Ticks。 假设您的循环类似于

cv::Mat frame; cv::VideoCapture cap(video_path);
while (cap.read(frame)) {
     /* .. */
}

您可以尝试类似

的内容
#include <chrono>
using namespace std::chrono;

time_point<steady_clock> begin_time = steady_clock::now(), new_time;
cv::Mat frame; 
cv::VideoCapture cap(video_path);
size_t frame_counter = 0;

while (cap.read(frame)) {
    /* do stuff.. */ 
    frame_counter++;
    new_time = steady_clock::now();

    if (new_time - begin_time >= seconds{1}) {
        /* Do something with the fps in frame_counter */
        frame_counter = 0;
        begin_time = new_time;
    } 
}