cv :: VideoCapture的buffersize $ c>对象。
According to this source, you can set the buffersize of a
cv::VideoCapture cap; cap.set(CV_CAP_PROP_BUFFERSIZE, 3); // internal buffer will now store only 3 frames // rest of your code...
There is an important limitation however:
CV_CAP_PROP_BUFFERSIZE内部缓冲存储器中存储的帧数（注意：只支持DC1394 v 2.x后端）
If the solution does not work, take a look at this post that explains how to hack around the issue.
In a nutshell: the time needed to query a frame is measured; if it is too low, it means the frame was read from the buffer and can be discarded. Continue querying frames until the time measured exceeds a certain limit. When this happens, the buffer was empty and the returned frame is up to date.
(The answer on the linked post shows: returning a frame from the buffer takes about 1/8th the time of returning an up to date frame. Your mileage may vary, of course!)
A different solution, inspired by this post, is to create a third thread that grabs frames continuously at high speed to keep the buffer empty. This thread should use the
cv::VideoCapture.grab() to avoid overhead.
You could use a simple spin-lock to synchronize reading frames between the real worker thread and the third thread.