0
以下是我的代碼。它是一個從客戶端接收位圖流的服務器程序,我希望實時顯示位圖。然而,「frame.set_data(im)」是我的代碼的瓶頸,我只得到5 FPS。禁用該行,我得到接收圖像15fps。 (如果沒有set_data(),顯示將被禁用)。用matplotlib和set_data()顯示實時位圖太慢。如何使用位圖執行位圖操作?
我查找了其他答案,並且我知道我必須使用MatPlotLib執行blitting來加快速度。但是,我不知道如何使用位圖執行blitting。有人能幫我快速解決問題嗎?
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
最終速度肯定取決於圖像的大小。使用'set_data'提供數據以imshow確實需要一些時間,所以幀率下降並不奇怪。 Blitting可能有所幫助。現在我不知道你的應用程序是否允許使用'matplotlib.animation.FuncAnimation'?如果是這樣,可以直接使用'blit = True'。如果沒有,看看[這個問題](http://stackoverflow.com/questions/40126176/fast-live-plotting-in-matplotlib-pyplot)如何使用blitting沒有內置的動畫類。 – ImportanceOfBeingErnest