[英]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.