簡體   English   中英

imwrite opencv是否會影響捕獲時間?

[英]is capture time affected with imwrite opencv?

我正在使用C ++和opencv捕獲相機圖像。 在下面的代碼所示的過程中,我還通過在捕獲圖像之前和之后使用gettimeofday()來測量捕獲持續時間(以毫秒為單位gettimeofday()

Mat IMG; 
unsigned long ms;
VideoCapture cap(0);
struct timeval tp1,tp2;
while(1)
{
   gettimeofday(&tp1,NULL);
   cap>>IMG;
   gettimeofday(&tp2,NULL);
   ms=10000000*(tp1.tv_sec-tp2.tv_sec)+(tp1.tv_usec-tp2.tv_usec);
   cout<<ms/1000<<endl;
}

我知道我的相機每秒最多可以拍攝60張圖像。 因此此代碼將輸出15〜17 ms的值。 現在我想保存圖像,因此我使用imwrite()函數,並在第二次調用gettimeofday()之后添加它,如下所示:

Mat IMG; 
unsigned long ms;
VideoCapture cap(0);
int cc=0;
struct timeval tp1,tp2;
while(1)
{
   gettimeofday(&tp1,NULL);
   cap>>IMG;
   gettimeofday(&tp2,NULL);
   ms=10000000*(tp1.tv_sec-tp2.tv_sec)+(tp1.tv_usec-tp2.tv_usec);
   cc=cc+1;
   imwrite("IMG_"+std::to_string(cc)+".png",IMG);
   cout<<ms/1000<<endl;
}

現在在這種情況下,輸出將為5〜6 ms! 如果我在寫入圖像后第二次調用gettimeofday() ,我將獲得15〜17ms的相同值。 那怎么可能? 提前致謝。

發生這種情況是因為您只測量等待VideoCapture的時間。

在第一個示例中,提取下一幀將始終阻塞,直到准備就緒為止(並且只在那里花費時間),這意味着您將看到與幀速率相反的值。

在第二個示例中,第一幀的讀取時間應相同。 但是,然后您需要花一些時間將圖像寫入文件。 發生這種情況時,相機將開始記錄下一幀-這意味着當您下次要求它給您提供圖像時,執行該操作所需的部分時間已經過去,因此等待時間較短。

暫無
暫無

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

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