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