2017-02-06 13 views
-2

Я работаю над программой Python (2.7.13), которая считывает изображения с веб-камеры (обновляется в отдельном потоке), преобразует перспективу и помещает живое видео в окно на экране, используя opencv (3.2.0-dev). Я получаю очень мало FPS (13), обновляя выходное изображение 720x1280 с помощью cv2.imshow(). Если я удалю вызов cv2.imshow() и оставлю остальную часть цикла той же, она будет до 75 FPS. Что я должен использовать вместо cv2.imshow(), чтобы уменьшить это узкое место обновления изображения? Я использую MacBook Pro 2016 с выделенной графической картой.Как быстро обновить изображения на экране с помощью Python/OS-X и улучшить работу opensv imshow()

Нужно ли мне PyOpenGL для этого, и если да, то есть какие-либо четкие примеры документированы? Я пробовал блистательную функцию Пигама и не видел улучшения в FPS. Я рассматривал Pyglet, который использует OpenGL, но я не был знаком с парадигмой событий, используемых Pyglet, и не был готов переписать мой код, если окажется, что есть более подходящий способ сделать это, поскольку Pyglet, кажется, в основном для игры и некоторые источники говорят, что он не ухожен.

ответ

1

Функция imshow() не предназначена для отображения в реальном времени или потокового видео. Вы можете легко работать с частотой кадров, используя OpenGL, но при этом требуется немало усилий. Посмотрите на PySDL, который предоставляет API более высокого уровня для OpenGL, но по-прежнему предназначен для работы с частотой кадров.

+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

 Смежные вопросы

  • Нет связанных вопросов^_^