对于我正在开发的计算机视觉项目,我需要使用Logitech C920摄像头抓取图像。我使用OpenCV的VideoCapture来做到这一点,但是我面临的问题是,我在某个时刻拍摄的图像没有显示相机看到的最新内容。也就是说,如果我在时间戳t处拍摄一张图像,它可以显示相机在时间戳(t-delta)处看到的内容。抓取新摄像头图像时的OpenCV VideoCapture/V4L2延迟

我这样做是通过编写一个递增计数器并将其显示在屏幕上的程序来完成的。我将相机指向屏幕并进行录制。当计数器达到某个值时,比如说10000,它会抓取一个图像并将其保存为文件名“counter_value.png”(例如10000.png)。这样我就可以将计数器的当前值与摄像机看到的当前值进行比较。我注意到大多数时候延迟大约是4-5帧,但它不是一个固定值。

我看到类似的帖子关于这个问题,但没有一个真正的帮助。有些人建议将帧抓取程序放入单独的线程并更新“current_frame”Mat变量。我尝试过,但由于某种原因,问题仍然存在。其他人提到,相机在Windows上运行良好(但我需要使用Linux,但)。我试着在Windows上运行相同的代码,实际上延迟只有大约1帧(这可能是因为屏幕没有足够快地更新,相机没有看到计数器)。

然后,我决定只使用V4L2代码运行一个简单的摄像头查看器,认为这个问题可能来自OpenCV。我再次经历了同样的延迟,这使我相信驱动程序正在使用某种缓冲区来缓存图像。

我是新来V4L2,我真的需要尽快解决这个问题,所以我的问题,你们是:

有没有人发现,为获得使用V4L2最新的图像解决方案(和也许是OpenCV)?

如果没有办法使用V4L2来解决它,那么有没有人知道在Linux上解决这个问题的另一种方法?