繁体   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