Ste*_*veS 3 opencv amazon-s3 amazon-web-services python-3.x boto3
我的 S3 存储桶文件夹中有一堆图像。
我有一个来自 S3 ( img_list)的键列表,我可以读取和显示图像:
key = img_list[0]
bucket = s3_resource.Bucket(bucket_name)
img = bucket.Object(key).get().get('Body').read()
Run Code Online (Sandbox Code Playgroud)
我有一个功能:
def image_from_s3(bucket, key):
bucket = s3_resource.Bucket(bucket)
image = bucket.Object(key)
img_data = image.get().get('Body').read()
return Image.open(io.BytesIO(img_data))
Run Code Online (Sandbox Code Playgroud)
现在我想要的是使用 OpenCV 读取图像,但出现错误:
key = img_list[0]
bucket = s3_resource.Bucket(bucket_name)
img = bucket.Object(key).get().get('Body').read()
cv2.imread(img)
SystemError Traceback (most recent call last)
<ipython-input-13-9561b5237a85> in <module>
2 bucket = s3_resource.Bucket(bucket_name)
3 img = bucket.Object(key).get().get('Body').read()
----> 4 cv2.imread(img)
SystemError: <built-in function imread> returned NULL without setting an error
Run Code Online (Sandbox Code Playgroud)
请建议如何以正确的方式阅读它?
对不起,我在评论中弄错了。此代码在内存缓冲区中设置一个 PNG 文件以模拟您从 S3 获得的内容:
#!/usr/bin/env python3
from PIL import Image, ImageDraw
import cv2
# Create new solid red image and save to disk as PNG
im = Image.new('RGB', (640, 480), (255, 0, 0))
im.save('image.png')
# Slurp entire contents, raw and uninterpreted, from disk to memory
with open('image.png', 'rb') as f:
raw = f.read()
# "raw" should now be very similar to what you get from your S3 bucket
Run Code Online (Sandbox Code Playgroud)
现在,我只需要这个:
nparray = cv2.imdecode(np.asarray(bytearray(raw)), cv2.IMREAD_COLOR)
Run Code Online (Sandbox Code Playgroud)
所以,你应该需要:
bucket = s3_resource.Bucket(bucket_name)
img = bucket.Object(key).get().get('Body').read()
nparray = cv2.imdecode(np.asarray(bytearray(img)), cv2.IMREAD_COLOR)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3739 次 |
| 最近记录: |