gpt4 book ai didi

c++ - imwrite opencv 会影响捕获时间吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:20:37 25 4
gpt4 key购买 nike

我正在使用 C++ 和 opencv 来捕捉相机图像。在此过程中,如下面的代码所示,我还通过在捕获图像前后使用 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 毫秒!如果我在图像写入之后第二次调用 gettimeofday(),我将获得相同的 15~17ms 值。这怎么可能?提前致谢。

最佳答案

发生这种情况是因为您只测量等待 VideoCapture 的时间。

在第一个示例中,提取下一帧将始终阻塞,直到它准备就绪(并且只在那里花费时间),这意味着您将看到与帧速率成反比的值。

在第二个示例中,第一帧的读取时间应该相同。但是,您需要花时间将图像写入文件。发生这种情况时,相机将开始记录下一帧 - 这意味着当您下次要求它给您图像时,完成该操作所需的部分时间已经过去,因此您的等待时间更短。

关于c++ - imwrite opencv 会影响捕获时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50413090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com