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

How to quickly refresh images on screen with Python/OS-X and improve upon opencv's imshow()

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

为此我需要 PyOpenGL 吗?如果需要,是否有明确的示例记录?我尝试了 Pygame 的 blit 功能,并没有看到 FPS 的改进。我考虑过使用 OpenGL 的 Pyglet,但我不熟悉 Pyglet 使用的事件范例,如果发现有更合适的方法,我还没有准备好重写我的代码,因为 Pyglet 似乎主要是为了游戏和一些消息来源说它维护得不好。

imshow() 功能并非真正用于 real-time 或流式视频显示。您可以使用 OpenGL 以帧速率轻松 运行,但需要付出很多努力。查看 PySDL,它为您提供了更高水平的 OpenGL API,但仍然是为帧速率性能而设计的。

尝试只显示每个 n-th 图片。

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

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