【问题标题】:Does OpenGL display image faster than OpenCV?OpenGL 显示图像的速度是否比 OpenCV 快?
【发布时间】:2019-07-24 19:02:52
【问题描述】:

我正在使用 OpenCV 在投影仪上显示图像。但似乎 cv::imshow 不够快,或者从我的 CPU 到 GPU 再到投影仪的数据传输速度可能很慢,所以我想知道是否有比OpenCV?

我考虑过OpenGL,由于OpenGL直接使用GPU,因此命令可能比OpenCV使用的CPU更快。如果我错了,请纠正我。

【问题讨论】:

  • 投影机的帧率如何?在您自己的屏幕上效果如何?据了解,在 PC 平台上 imshow() 运行速度非常快。
  • 嗯,投影仪​​是 DLP 投影仪,因此最大 fps 为 120Hz。我的屏幕是 60Hz。

标签: c++ opengl opencv


【解决方案1】:

OpenCV 本身已经支持 OpenGL 进行图像输出。不用自己写!

查看文档: http://docs.opencv.org/modules/highgui/doc/user_interface.html#imshow http://docs.opencv.org/modules/highgui/doc/user_interface.html#namedwindow

首先使用namedWindow 创建窗口,您可以在其中传递WINDOW_OPENGL 标志。 然后,您甚至可以使用 OpenGL 缓冲区或 GPU 矩阵作为imshow 的输入(数据永远不会离开 GPU)。但它也会使用 OpenGL 来显示常规矩阵数据。

请注意:

要启用 OpenGL 支持,请使用 CMake 配置 OpenCV WITH_OPENGL=ON 。目前只有 WIN32、GTK 支持 OpenGL 和 Windows 和 Linux 上的 Qt 后端(MacOS 和 Android 不是 支持的)。对于 GTK 后端,需要 gtkglext-1.0 库。

请注意,这是 OpenCV 2.4.8,此功能最近发生了变化。我知道早期版本中与 Qt 后端一起支持 OpenGL,但我不记得它是什么时候引入的。

关于性能: 使用 OpenGL 输出图像是 CV 社区非常流行的优化,尤其是在输出视频序列时。

【讨论】:

  • 谢谢。是的,从 OpenCV 文档来看,使用imshow 时,似乎必须将图像存储在ogl::Bufferogl::Texture2Dgpu::GpuMat 中。我正在从源代码向 OpenCV 添加 OpenGL 支持。但我的项目适用于WIN64。我将测试此支持是否仅适用于 WIN32。
  • WIN32 后端支持 32 位和 64 位。这只是 Windows 的粗略 API 命名。此外,imshow 与 cv::Mat 一起使用,其他格式是附加的!
  • 它适用于我的 64 位编译器!现在,通过将图像存储在gpu::GpuMat 中,我可以通过 OpenGL 支持更快地显示图像。但是当输入到imshowogl::Bufferogl::Texture2Dgpu::GpuMat 时,哪个结构最快?
  • 我预计不会有明显的差异。前两个不依赖于 CUDA,所以我更喜欢它们。
  • 有人可以分享一个示例代码来使用opengl和opencv吗?
【解决方案2】:

OpenGL 针对渲染图像进行了优化,因此速度可能更快。这真的取决于 OpenCV 实现是否使用任何 GPU 加速以及瓶颈是否在渲染方面。

您是否尝试过 GPU 加速的 OpenCV? - http://opencv.org/platforms/cuda.html

您显示的图像有多大?现在使用cv::imshow显示图片需要多长时间?

【讨论】:

  • 我用 OpenCV 源代码编译了 CUDA。但我不知道如何使用 CUDA 显示图像。我的图像是 640x480,RGB 8 位。 'cv::imshow'的执行时间为0.002s。
  • CUDA 根本没有帮助。它没有输出功能。
  • @hby001 0.002s 非常快,这意味着您可以在 1 秒内完成 500 次? (500fps) 你需要多快?
  • @DannieSim 看起来很快,但这只是代码运行时间,至于投影仪显示图像的时间,我想不会只有0.002s。
【解决方案3】:

我知道这是一个老问题,但我碰巧遇到了完全相同的问题。根据我的观察,我得出的结论是,问题的根源在于投影仪自身的延迟,尤其是在使用旧型号的情况下。

我是怎么得出结论的?

我在笔记本电脑显示器和投影仪上显示了与cv::imshow() 相同的视频序列。然后我挥了挥手。很明显,该投影仪引入了显着的延迟。

为了仔细检查,我打开了一个网络摄像头视频,在它面前挥了挥手,观察了显示器和投影仪上的差异。网络摄像头不进行任何处理,也不进行 opencv 操作,因此据我所知,唯一能解释延迟的就是投影仪本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多