如何使用Python / OS-X快速刷新屏幕上的图像并改进opencv的imshow()

时间:2017-02-06 00:12:43

标签: python opencv opengl pyglet pyopengl

我正在使用Python(2.7.13)程序从网络摄像头读取图像(在单独的线程上刷新),进行透视转换,并将实时视频放在屏幕上的窗口中,使用opencv(3.2.0-dev)。我得到非常低的FPS(13)用cv2.imshow()更新720x1280输出图像。如果我删除对cv2.imshow()的调用并保持循环的其余部分相同,则它最多可达75 FPS。我应该用什么代替cv2.imshow()来减少这个图像刷新瓶颈?我使用带有专用显卡的2016 MacBook Pro。

我是否需要PyOpenGL,如果有,是否有任何明确的例子记录?我尝试了Pygame的blit功能,并没有看到FPS有所改善。我考虑过使用OpenGL的Pyglet,但是我并不熟悉Pyglet使用的事件范例,并且如果事实证明那么我还没有准备好重写我的代码,这是一种更合适的方法,如Pyglet似乎主要是针对游戏而且一些消息来源称其维护得不好。

2 个答案:

答案 0 :(得分:1)

imshow()功能并非真正用于实时或流式视频显示。您可以使用OpenGL以帧速率轻松运行,但需要付出相当大的努力。看一下PySDL,它为您提供了更高级别的OpenGL API,但仍然是为帧速率性能而设计的。

答案 1 :(得分:0)

尝试仅显示每个第n张图片。

或尝试将图像保存到磁盘 - 最好是ssd或ramdisk - 并使用支持自动重新加载的imageviewer显示它。

您不会以这种方式看到所有图像,但很可能它足以进行监控 - 您可以节省openCV的宝贵计算时间。