OpenGL显示图像的速度比OpenCV快吗?

时间:2014-01-15 05:22:47

标签: c++ opengl opencv

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

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

3 个答案:

答案 0 :(得分:8)

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 with配置OpenCV   WITH_OPENGL = ON。目前OpenGL仅支持WIN32,GTK   Windows和Linux上的Qt后端(MacOS和Android不是   支持的)。对于GTK后端,需要gtkglext-1.0库。

请注意,这是OpenCV 2.4.8,并且此功能最近已更改。我知道早期版本中的OpenGL支持与Qt后端一起使用,但我不记得它什么时候被引入。

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:0)

我知道这是一个老问题,但我碰巧遇到了完全相同的问题。从我的观察中,我得出的结论是,问题的根源是投影仪自身的延迟,特别是如果使用的是较旧的模型。

我怎么得出结论?

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

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