我已成功通過套接字發送圖像,并且在接收端,我擁有與發送的圖像文件完全相同的原始字節。這意味著,如果我將這些字節二進制寫入文件,我將獲得與發送的文件相同的文件。我嘗試在不先保存的情況下顯示來自 Python 的圖像,但我在這樣做時遇到了麻煩。如果我理解正確,matplotlib.imread()則需要文件的路徑,然后將該文件解碼為多個矩陣。做這樣的事情效果很好:import matplotlib.pyplot as pltimport matplotlib.image as mpimg# data is the image data that was received from the socketfile = open("d:\\image.png", 'wb')file.write(data)file.close()img = mpimg.imread("d:\\image.png")plt.imshow(img)plt.show()顯然我應該為此使用臨時文件,但我編寫它只是為了示例。如果我已經有了這些字節,有什么方法可以在不事先調用的情況下調用imshow()和show()方法嗎?imread()
1 回答

眼眸繁星
TA貢獻1873條經驗 獲得超9個贊
如果您可以直接從套接字讀取數據,則可以使用 將套接字轉換為文件對象,然后像使用常規文件一樣makefile()提供套接字。imread讀取時記得設置編解碼器:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# don't read from your socket, instead, call this where you would call read
fp = your_socket.makefile()
with fp:
img = mpimg.imread(fp, format='jpeg')
plt.imshow(img)
plt.show()
我已經搜索過,但找不到直接從 matplotlib 中的字節解碼圖像的方法。如果由于已經有了 bytes 數組而無法使用上述解決方案,則可以使用BytesIO創建臨時緩沖區:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import io
fp = io.BytesIO(data)
with fp:
img = mpimg.imread(fp, format='jpeg')
plt.imshow(img)
plt.show()
添加回答
舉報
0/150
提交
取消