预处理图像后将图像写入s3fs.S3FileSystem

问题描述

我目前正在从我的学校系统访问s3存储桶。
要进行连接,我使用了以下内容

import s3fs
from skimage import exposure
from PIL import Image,ImageStat

s3 = s3fs.S3FileSystem(client_kwargs={'endpoint_url': 'XXX'},key='XXX',secret='XXX')

我可以按照上述定义从s3存储桶中检索图像,并使用进行预处理

infile = s3.open('test.jpg',"rb")
image = Image.open(infile)
img = np.asarray(image) #numpy.ndarray
img_eq = exposure.equalize_adapthist(img,clip_limit=0.03) #CLAHE
image_eq = Image.fromarray((img_eq * 255).astype(np.uint8)) #Convert back to image

要在本地保存生成的图像,只需

image_eq.save("hello.jpg")

但是,我该如何将结果图像保存/写入s3fs文件系统中?

解决方法

Pillow 中的

save 也接受一个文件。你可以这样做:

 image_eq.save(fs.open('s3://bucket/file.png','wb'),'PNG')

你必须写一个二进制文件。我认为通过强制执行文件类型效果最好,例如在本例中为 PNG。