2016-10-10 167 views
1

有一段时间我一直在试图通过计算我的OpenCV的计划未来的视频流的FPS,并想知道是否有任何方式做它用计时而不是time.h中或其他任何用CPU滴答测量的API。经过大量的实验和研究后,我还没有找到使用Chrono的简单解决方案。如何使用Chrono和OpenCV计算实时视频流的FPS?

是否有保持简单愚蠢的解决方案来计算您的FPS Chrono?或者正在使用CPU ticks是不可避免的?

回答

1

你有方法

VideoCapture::get(CV_CAP_PROP_FPS) 难道不工作?

据我所知,chrono方法仍然会使用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; 
    } 
} 
+2

尽最大努力把从不使用'.Count中()':http://www.youtube.com/watch? v = P32hvk8b13M&t = 41m15s改为:'new_time - begin_time> = 1s',或在C++ 11中:'new_time - begin_time> = seconds {1}' –

+0

@HowardHinnant固定。谢谢 :)。 – Aram

+0

很好的答案。 +1。 –