【问题标题】:OpenCV delay in camera output on the screen屏幕上相机输出中的 OpenCV 延迟
【发布时间】:2012-01-26 16:54:38
【问题描述】:

我注意到 OpenCV 有一个奇怪的地方。我使用 OpenCV 提供的基本示例 C 程序之一在屏幕上显示相机输出。但是,与相机看到的相比,我看到屏幕上的输出稍有延迟。因此,如果我将手移到相机前,它会以大约 0.1 秒的延迟出现在屏幕上。我们正在开发一个对这些延迟非常敏感的应用程序。有没有办法消除这种延迟,使图像传输是瞬时的?例如,当我通过 Skype 查看我的相机输出时,我看不到微小的延迟。

非常感谢! P.

【问题讨论】:

  • 最终输出分辨率是多少?这与Skype分辨率相比如何?你能指定哪个样本吗?您使用的是什么操作系统?
  • 很可能您必须编写自己的、高度优化的库来立即捕获相机。简单的驱动程序,例如 OpenCV 中使用的驱动程序,具有固有的延迟
  • 平台是 Windows 7 64 位。输出分辨率为 640x480。示例代码很简单。它名为 camera.py,位于 python 的示例目录中。我不知道 Skype 与 OpenCV 的输出速度之间的定量差异,但我可以通过查看视频并将手快速移到它前面看到,当我通过 opencv 中的 imshow() 输出视频时,我得到大约 0.1 秒的延迟,但 Skype 摄像头输出几乎没有延迟。如果 OpenCV 驱动程序有固有的延迟,那么这是 OpenCV 的问题,我们将不得不改变技术。感谢您的帮助!

标签: opencv delay


【解决方案1】:

openCV highgui 显示窗口仅用于简单显示图像处理结果 - 它并未针对高性能或低延迟进行优化。

你必须写一些东西来在视频输入库和你想使用的任何显示库之间进行交流。

【讨论】:

  • 感谢您的回复。因此,如果我将视频输出存储到文件而不是将其输出到屏幕,那么根本不会有延迟吗?你觉得这样行吗?我不需要在屏幕上显示它。我需要立即处理图像。这才是最重要的。谢谢!
  • videoinput 库非常好,尽管它取决于所使用的 directshow 过滤器。如果您的图像相对较小,那么现代 PC 可以以低帧速率“实时”对每个图像进行大量处理。如果您需要以 60fps 对 1920x1080p 图像进行复杂处理,那就更麻烦了!
  • 相机在 640x480 像素分辨率下工作,我故意不做任何图像处理。我只是从相机读取帧并使用 cv::imshow() 在我的屏幕上显示它们。因此,如果进行了任何处理,则只需将图像显示在屏幕上即可。仍然有那个微小的延迟。其他软件不会发生这种延迟。我希望这是 highgui 库显示帧速度不够快的问题。谢谢!
【解决方案2】:

只是为了确认 - 是的,一旦我关闭了 highgui 视频输出,处理速度就会显着提高,FPS 也会随之提高。现在,该应用程序能够以 80 FPS 的速度获取和处理帧。无需编写新的视频输出库即可解决类似问题的一种解决方案是仅显示视频的每一帧(例如,第十帧)以节省处理能力。

谢谢

【讨论】:

  • 另一个大多数人不知道但给我们带来大问题的因素 - LCD 屏幕自身的内部电子设备通常有 3-4 帧 (@60fps) 的延迟,如果您正在尝试做精确的手眼任务
  • 嗯,我没有意识到这一点。感谢分享。将来知道它可能会很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2019-12-09
  • 1970-01-01
  • 2016-02-01
相关资源
最近更新 更多