我有以下代码
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import boto3
s3 = boto3.resource('s3', region_name='us-east-2')
bucket = s3.Bucket('sentinel-s2-l1c')
object = bucket.Object('tiles/10/S/DG/2015/12/7/0/B01.jp2')
object.download_file('B01.jp2')
img=mpimg.imread('B01.jp2')
imgplot = plt.imshow(img)
plt.show(imgplot)
并且有效。但它首先将文件下载到当前目录的问题。是否可以直接在 RAM 中读取文件并将其解码为图像?
最佳答案
我建议使用 io module直接将文件读入内存,根本不需要使用临时文件。
例如:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import boto3
import io
s3 = boto3.resource('s3', region_name='us-east-2')
bucket = s3.Bucket('sentinel-s2-l1c')
object = bucket.Object('tiles/10/S/DG/2015/12/7/0/B01.jp2')
file_stream = io.StringIO()
object.download_fileobj(file_stream)
img = mpimg.imread(file_stream)
# whatever you need to do
如果您的数据是二进制的,您也可以使用 io.BytesIO
。
关于python - 如何将图像文件从 S3 存储桶直接读入内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44043036/