Каков самый быстрый способ масштабирования и отображения изображения в Python?
-
02-07-2019 - |
Вопрос
Мне нужно отобразить двумерный numpy.array int16 со скоростью 20 кадров в секунду или около того.Использование imshow в Matplotlib подавляет все, что превышает 10 кадров в секунду.Очевидно, есть некоторые проблемы с масштабированием и интерполяцией.Добавлю, что размеры массива неизвестны, но, вероятно, будут где-то тридцать на четыреста.
Это данные с датчика, который должен отображать данные в режиме реального времени, поэтому данные необходимо повторно отбирать на лету.
Решение
Самый быстрый способ отобразить точки данных размером 30x400 — это:
Используйте цветовые массивы OpenGL
Если вы можете быстро преобразовать свои данные в то, что OpenGL понимает как цветовой массив, вы можете создать массив вершин, описывающий четырехугольники, по одному для каждого датчика, затем обновить свой цветовой массив и нарисовать его орфографически на экране.
Используйте текстуры OpenGL.
Если вы можете быстро преобразовать свои точки данных в текстуру OpenGL, вы можете нарисовать один квадрат с фиксированными UV-координатами, привязанный к этой текстуре.
Используйте pygame
Pygame поддерживает преобразование Numpy/Numarray в поверхности. Затем Pygame может преобразовывать такие поверхности, что включает в себя повторную выборку, после повторной выборки вы можете перенести ее на экран.
Разное
пиглет делает работу с OpenGL очень простой