簡體   English   中英

測得的fps高於理論值

[英]Measured fps is higher than theoretical one

我正在測量C ++圖像處理程序中幾個功能的執行時間。 特別是,我想擁有使用USB攝像機捕獲幀的實際執行時間。

問題在於結果似乎與相機參數不一致:相機的最大拍攝速度應該為30 fps,而我得到的獲取幀的測量時間通常少於33毫秒,這就是I認為應該是可以預期的。 例如,我得到很多12毫秒的間隔,這似乎太少了。

這是代碼:

#include <time.h>
#include <sys/time.h>

double get_wall_time(){
    struct timeval time;
    if (gettimeofday(&time,NULL)){
        //  Handle error
        return 0;
    }
    return (double)time.tv_sec + (double)time.tv_usec * .000001;
}

int main(){
    while (true) {
      double previoustime = get_wall_time();
      this->camera.readFrame();
      double currenttime = get_wall_time();
      std::cout << currenttime-previoustime << std::endl;
      // Other stuff
      // ...
      // ...
      usleep(3000);
    }
}

正如@Revolver_Ocelot所述,您正在測量從get_wall_time結束到另一個類似調用結束的時間。 要修復您的代碼,請執行以下操作:

double currenttime = get_wall_time();    
while (true) {
    double previoustime = currenttime;
    this->camera.readFrame();
    ... 
    currentime = get_wall_time();
}

您看得出來差別嗎? 此代碼測量每次通過之間的間隔,這就是您希望每秒獲得的幀數。

您讀取相機的速度將不同於完成新幀的速度。 您的相機可能以30 FPS的速度進行錄制,而您可能以15 FPS或90 FPS的速度進行讀取,因此對幀流進行了二次采樣或過采樣。

可以超采樣的限制是讀入圖像和存儲圖像所需的時間/ 1。

這就是@Jacob Hull表示阻止的含義; 如果readFrame只是讀取最后一幀,則直到新幀之前它都不會阻塞,您將獲得與測量相同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM