我正在使用OpenCV在投影机上显示图像。但似乎 cv :: imshow 速度不够快,或者数据传输从我的CPU到GPU然后到投影仪都很慢,所以我想知道是否有更快的显示方式比OpenCV?
我考虑过 OpenGL ,因为OpenGL直接使用GPU,命令可能比OpenCV使用的CPU更快。如果我错了,请纠正我。
答案 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操作,因此,据我了解,唯一可以解释延迟的是投影机本身。