Я использую 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 мс.Теперь я хочу сохранить свои изображения, поэтому я использую для этого функцию 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 ~ 17 мс.Как это возможно?Заранее спасибо.