【发布时间】:2018-05-18 14:03:55
【问题描述】:
我正在使用 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 值。这怎么可能?提前致谢。
【问题讨论】:
标签: c++ image opencv capture timing