2017-02-06 2 views
-2

Ich arbeite an einem Python (2.7.13) -Programm, das Bilder von der Webcam liest (in einem separaten Thread aktualisiert), wandelt eine Perspektive um und legt das Live-Video mit opencv (3.2.0-dev) in ein Fenster auf dem Bildschirm. Ich bekomme sehr niedrige FPS (13), ein 720x1280 Ausgabebild mit cv2.imshow() zu aktualisieren. Wenn ich den Anruf zu cv2.imshow() entferne und den Rest der Schleife gleich behalte, geht es bis zu 75 FPS. Was sollte ich anstelle von cv2.imshow() verwenden, um diesen Engpass bei der Bildaktualisierung zu reduzieren? Ich benutze ein 2016 MacBook Pro mit dedizierter Grafikkarte.Wie schnell Bilder auf dem Bildschirm mit Python/OS-X zu aktualisieren und Opencv imshow() verbessern

Benötige ich dafür PyOpenGL, und wenn ja, sind klare Beispiele dokumentiert? Ich habe Pygames Blit-Funktion ausprobiert und keine Verbesserung der FPS gesehen. Ich habe Pyglet betrachtet, das OpenGL verwendet, aber ich war nicht vertraut mit dem Paradigma der von Pyglet verwendeten Ereignisse und war nicht bereit, meinen Code neu zu schreiben, wenn sich herausstellt, dass es einen geeigneteren Weg gibt, wie Pyglet zu sein scheint Spiele und einige Quellen sagen, es ist nicht gut gepflegt.

Antwort

1

Die Funktion imshow() ist nicht wirklich für die Echtzeit- oder Streaming-Videoanzeige gedacht. Sie können leicht mit Framerate mit OpenGL laufen, aber es ist ziemlich viel Aufwand beteiligt. Werfen Sie einen Blick auf PySDL, die Ihnen eine höhere API zu OpenGL gibt, aber immer noch für die Frameratenleistung ausgelegt ist.

+0

Danke, dass Sie mich in die richtige Richtung weisen. Die Antwort auf diese Frage hat Code, der angepasst werden könnte: [link] (http://stackoverflow.com/questions/18434348/converting-cv2-images-to-pysdl2-surfaces-for-blitting-to-screen#19554202) –

0

Versuchen Sie, nur jedes n-te Bild anzuzeigen.

Oder versuchen Sie, das Image auf Festplatte zu speichern - vorzugsweise SSD oder Ramdisk - und zeigen Sie es mit einem Imageviewer an, der das automatische Neuladen unterstützt.

Sie werden nicht alle Bilder auf diese Weise sehen, aber es ist wahrscheinlich genug für die Überwachung - und Sie sparen die wertvolle Rechenzeit von openCV.

+0

Oder vielleicht könnten Sie mit einer verkleinerten Vorschau leben .. – RuDevel

Verwandte Themen