2017-02-06 26 views
-2

我正在研究從網絡攝像頭讀取圖像(在單獨線程上刷新)的Python(2.7.13)程序,進行透視變換,並使用opencv(3.2.0-dev)將實況視頻放在屏幕上的一個窗口中。我得到非常低的FPS(13)用cv2.imshow()更新720x1280輸出圖像。如果我刪除對cv2.imshow()的調用並保持循環的其餘部分相同,則它將上升到75 FPS。我應該使用什麼來代替cv2.imshow()來減少此圖像刷新瓶頸?我正在使用帶專用圖形卡的2016 MacBook Pro。如何使用Python/OS-X在屏幕上快速刷新圖像並改進opencv的imshow()

我需要PyOpenGL嗎?如果有的話,是否有任何清晰的例子記錄?我嘗試了Pygame的blit功能,並沒有看到FPS的改進。我認爲使用OpenGL的Pyglet,但我不熟悉Pyglet使用的事件的範例,並且如果事實證明有更合適的方法來執行,Pyglet似乎主要是爲了遊戲和一些消息來源說,它不是很好的維護。

回答

1

imshow()功能並非真正用於實時或流式視頻顯示。你可以很容易地使用OpenGL以幀速率運行,但涉及的功夫相當大。看看PySDL,它爲您提供了OpenGL的更高級別的API,但仍然設計用於幀速率性能。

+0

謝謝你指點我在正確的方向。這個問題的答案有可以適應的代碼:[link](http://stackoverflow.com/questions/18434348/converting-cv2-images-to-pysdl2-surfaces-for-blitting-to-screen#19554202) –

0

試着只顯示每一個第n個圖像。

或嘗試將映像保存到磁盤 - 最好是ssd或ramdisk - 並使用支持自動重新加載的圖像查看器顯示它。

你不會以這種方式看到所有的圖像,但最有可能它已經足夠用於監視 - 並且可以節省openCV的寶貴計算時間。

+0

或者,也許你可以住一個縮小預覽.. – RuDevel