【发布时间】:2014-12-04 09:40:53
【问题描述】:
对于我正在进行的计算机视觉项目,我需要使用 Logitech C920 网络摄像头抓取图像。我正在使用 OpenCV 的 VideoCapture 来做到这一点,但我面临的问题是我在某个时刻拍摄的图像没有显示相机看到的最新内容。也就是说,如果我在时间戳 t 拍摄图像,它会显示相机在时间戳 (t - delta) 看到的内容。
我通过编写一个程序来增加一个计数器并将其显示在屏幕上。我将相机对准屏幕并让它记录下来。当计数器达到某个值(例如 10000)时,它会抓取图像并将其保存为文件名“counter_value.png”(例如 10000.png)。这样我就能够将计数器的当前值与相机看到的当前值进行比较。我注意到大部分时间延迟在 4-5 帧左右,但这不是一个固定值。
我看到了关于这个问题的类似帖子,但没有一个真正有帮助。有些人建议将帧抓取例程放入单独的线程并更新“current_frame”Mat 变量。我试过了,但由于某种原因,问题仍然存在。其他人提到相机在 Windows 上运行良好(但我需要使用 Linux)。我尝试在 Windows 上运行相同的代码,确实延迟只有大约 1 帧(这也可能是相机没有看到计数器,因为屏幕更新速度不够快)。
然后我决定运行一个仅基于 V4L2 代码的简单网络摄像头查看器,认为问题可能来自 OpenCV。我再次遇到了同样的延迟,这让我相信驱动程序正在使用某种缓冲区来缓存图像。
我是V4L2的新手,我真的需要尽快解决这个问题,所以我的问题是:
- 有没有人找到使用 V4L2(可能还有 OpenCV)获取最新图像的解决方案?
- 如果无法使用 V4L2 解决此问题,是否有人知道在 Linux 上解决此问题的另一种方法?
问候,
米海
【问题讨论】:
标签: delay webcam video-capture latency v4l2