Загрузка массива в виде изображения .jpg в Azure хранилище BLOB-объектов - PullRequest
0 голосов
/ 30 января 2020

Я работаю над проектом обработки изображений, где мои изображения сохраняются в хранилище BLOB-объектов на Azure. Моя цель - прочитать изображения блобов и применить к ним некоторые преобразования, а затем загрузить их в отдельный контейнер, используя python. В настоящее время я могу читать изображения из Azure, преобразовывать изображения в массивы, чтобы их можно было обработать, но у меня возникают проблемы с возвратом массивов в Azure в виде изображений .jpg. Это то, что я пытаюсь (где resized_image - это массив (243, 387, 3)):

resized_image = bytes(resized_image)
blob_service.create_blob_from_bytes("transformed", "test.jpg", resized_image)

Это создает новый файл в моем «преобразованном» контейнере, но он пуст и отсутствует тип.

1 Ответ

0 голосов
/ 30 января 2020

В качестве примера, вот мой пример кода с использованием Azure Blob Storage SDK для Python и OpenCV (pip install azure-storage-blob opencv-python), чтобы загрузить изображение большого двоичного объекта для изменения размера и загрузить измененное изображение в Azure Blob.

from azure.storage.blob import BlockBlobService

account_name = '<your account name>'
account_key = '<your account key>'

blob_service = BlockBlobService(account_name, account_key)

container_name = '<your container name>'
blob_name = 'test_cat2.jpg' # my test image name
resized_blob_name = 'test_cat2_resized.jpg' # my resized image name

# Download image
img_bytes = blob_service.get_blob_to_bytes(container_name, blob_name)

# Resize image to 1/4 original size
import numpy as np
import cv2
src = cv2.imdecode(np.frombuffer(img_bytes.content, np.uint8), cv2.IMREAD_COLOR)
cv2.imshow("src", src)
(height, width, depth) = src.shape
dsize = (width//4, height//4)
tgt = cv2.resize(src, dsize)
cv2.imshow("tgt", tgt)
cv2.waitKey(0)

# Upload the resized image
_, img_encode = cv2.imencode('.jpg', tgt)
resized_img_bytes = img_encode.tobytes()
blob_service.create_blob_from_bytes(container_name, resized_blob_name, resized_img_bytes)

OpenCV imshow показывает исходное изображение и изображения с измененным размером, как показано на рисунке ниже.

enter image description here

Исходное изображение и изображения с измененным размером I загрузить с Azure Хранение BLOB-объектов, как показано на рисунке ниже.

enter image description here

...