我正在尝试VideoCapture使用cap.read(). 时间真的很关键。
openCV 中有一个 5 帧的内部缓冲区,因此当请求图像时,我必须先创建 4 个cap.grab(),然后再创建一个cap.read()以将时间减少到最短。
在文件cap_libv4l.cpp 中,有一个变量DEFAULT_V4L_BUFFERS (#define DEFAULT_V4L_BUFFERS 4)。
我改变了它并重新编译了 OpenCV。
#define DEFAULT_V4L_BUFFERS 0 不允许,它会给出错误。 
如果我将其更改为#define DEFAULT_V4L_BUFFERS 1,我只需要制作一个cap.grab()和一个cap.read()但时间不会减少。
当您减少DEFAULT_V4L_BUFFERSthen time of cap.read()increase的值时,两种情况下的总时间相同:缓冲区大小 4(4 次抓取和 1 次读取)和缓冲区大小 1(1 次抓取和 1 次读取)。
有人知道为什么会这样吗?除了使用线程之外,还有什么方法可以减少捕获时间?我测试了线程,但随后我遇到了捕获图像的“选择超时”问题。