Ниже мой код. Это серверная программа, которая получает поток битмапов от клиента, и я хочу отображать растровое изображение в реальном времени. Однако «frame.set_data (im)» - это шея бутылки моего кода, и я получаю только 5 FPS. Отключив эту строку, я получаю 15 кадров в секунду для получения изображений. (отображение отключено без использования set_data()).Отображение растрового изображения в реальном времени с помощью matplotlib и set_data() выполняется слишком медленно. Как выполнить биение с растровыми изображениями?
Я искал другие ответы, и я знаю, что должен выполнять блиты, чтобы ускорить работу с MatPlotLib. Тем не менее, я понятия не имею, как выполнять блиты с растровыми изображениями. Может ли кто-нибудь помочь мне быстро разобраться?
import matplotlib
matplotlib.use('TKAgg')
import matplotlib.pyplot as plt
while 1:
# Decode and Save Image
imgdata = base64.b64decode(data)
stream = io.BytesIO(imgdata)
# Display realtime gameplay
im = plt.imread(stream,"bmp")
if frame is None:
print "Start Rendering.."
frame = plt.imshow(im)
plt.show()
else:
frame.set_data(im)
plt.pause(0.00000001)
Кто-то может доказать, что я ошибаюсь, но я бы сказал, что matplotlib не подходит для этой задачи. Он больше ориентирован на качество, чем на производительность. Конечно, есть и другие библиотеки, которые могут показывать изображения намного быстрее (например, [pygame] (http://stackoverflow.com/q/8873219/3005167)). – kazemakase
Конечная скорость, безусловно, будет зависеть от того, насколько велики изображения. Предоставление данных для imshow с использованием 'set_data' занимает некоторое время, поэтому неудивительно, что частота кадров падает. Блиты могут помочь. Теперь я не знаю, сможет ли ваше приложение использовать 'matplotlib.animation.FuncAnimation'? Если это так, 'blit = True' можно напрямую использовать. Если нет, посмотрите [этот вопрос] (http://stackoverflow.com/questions/40126176/fast-live-plotting-in-matplotlib-pyplot) о том, как использовать блинттинг без встроенного класса анимации. – ImportanceOfBeingErnest