有一段时间我一直在尝试计算通过 OpenCV 程序传输的视频流的FPS,并想知道是否有任何方法可以使用< em> Chrono 而不是 time.h 或任何其他使用CPU滴答测量的API。经过大量的实验和研究,我还没有找到一个使用 Chrono 的简单解决方案。
使用 Chrono 计算您的FPS是否存在Keep-It-Simple-Stupid解决方案?或者正在使用CPU滴答不可避免?
答案 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;
}
}