2016-10-10 201 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。 –