How to get newest VideoCapture frame
Hello, I'm trying to load the very newest frame from a usb webcam; the following code works well enough using v3.1.0 via Codeblocks on Windows 7, I get a 1 sec delay between frame1 and frame2, and 2sec delay between frame2 and frame3, not exactly how the program reads. Problem is when I copy it onto a Pi3, using v2.4.13, Rasbian, the delay is ignored completely (or interrupted ??). I've tried using sleep() with unistd.h; I get a total delay of 6 seconds, but the cap.read() statements return consecutive frames about .04secs apart and not the 1, 2 or 3 second delay I want, because it's retrieving old frames in the buffer I assume. So how can I always get the very newest frame from VideoCapture? Any help would be great, I'm new to C++ and OpenCV. Thanks
#include <opencv/cv.hpp>
#include <iostream>
#include <time.h>
using namespace cv;
using namespace std;
void delay(unsigned int mseconds){
clock_t goal = mseconds + clock();
while (goal> clock());
}
Mat frame1, frame2, frame3;
VideoCapture cap(0);
int main(){
delay(1000);
cap.read(frame1);
delay(2000);
cap.read(frame2);
delay(3000);
cap.read(frame3);
imshow("1",frame1);
imshow("2",frame2);
imshow("3",frame3);
waitKey(0);
return 0;
}
clock return number of ticks not number of millisecond. You should use ((float)clock()*1000.0)/CLOCKS_PER_SEC+mseconds
You can use OpenCV function too GetTickCount
example is given in getTickfrequency