如何从 Python Azure 存储下载 Blob 图像并从中创建图像对象?
How to Download a Blob Image from Python Azure Storage and create an Image object out of it?
我有一个块 blob,它是一个 png 图像。当我将 blob 转换为字节并尝试创建图像时,我得到 数据不足 。
我是 python 和图像分析的新手。问题是 blob 的大小为 1714562,如果图像分别为 2024*1512,则宽度和高度分别为 2024*1512。
下面是我检索图像的代码:
#Get Required image
def findImage(containerName, imageName):
return block_blob_service.get_blob_to_bytes(
containerName,
input_folder + '/' + imageName,
max_connections=1).content;
而且我必须执行如下所述的操作来创建图像:
np.array(imageToProcess).reshape(imageSize)
或
PIL.Image.frombytes('L', imageSize, np.byte(imageToProcess), 'raw', 'L', 0, 1)
- imageToProcess 是 findImage 函数的输出。
我试图让 blob 流或路径仍然有同样的问题。这个 Blob 需要重新整形为实际图像大小并传递给另一个处理函数。
如果有人帮助我理解问题和可能的解决方案,我将不胜感激。
您从 Azure Blob Storage 下载的 PNG 文件是一个 png 格式的二进制字节字符串,您需要使用 OpenCV & Numpy 将其转换为 numpy 数组或 PIL.Image
对象。
这是我使用 OpenCV 和 numpy 或 PIL.Image
的示例代码。
使用 OpenCV 和 numpy
import numpy as np
import cv2
data = findImage(containerName, imageName)
print type(data)
# <type 'str'>
nparr = np.fromstring(data, np.uint8)
# if the numpy version is 2.x
img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)
# if the numpy version is 3.x
img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
print type(img_np)
# <type 'numpy.ndarray'>
使用 PIL.Image
& StringIO
from PIl import Image
from StringIO import StringIO
data = findImage(containerName, imageName)
print type(data)
# <type 'str'>
img = Image.open(StringIO(data))
print type(img)
# <class 'PIL.PngImagePlugin.PngImageFile'>
希望对您有所帮助。
我有一个块 blob,它是一个 png 图像。当我将 blob 转换为字节并尝试创建图像时,我得到 数据不足 。 我是 python 和图像分析的新手。问题是 blob 的大小为 1714562,如果图像分别为 2024*1512,则宽度和高度分别为 2024*1512。 下面是我检索图像的代码:
#Get Required image
def findImage(containerName, imageName):
return block_blob_service.get_blob_to_bytes(
containerName,
input_folder + '/' + imageName,
max_connections=1).content;
而且我必须执行如下所述的操作来创建图像:
np.array(imageToProcess).reshape(imageSize)
或
PIL.Image.frombytes('L', imageSize, np.byte(imageToProcess), 'raw', 'L', 0, 1)
- imageToProcess 是 findImage 函数的输出。
我试图让 blob 流或路径仍然有同样的问题。这个 Blob 需要重新整形为实际图像大小并传递给另一个处理函数。 如果有人帮助我理解问题和可能的解决方案,我将不胜感激。
您从 Azure Blob Storage 下载的 PNG 文件是一个 png 格式的二进制字节字符串,您需要使用 OpenCV & Numpy 将其转换为 numpy 数组或 PIL.Image
对象。
这是我使用 OpenCV 和 numpy 或 PIL.Image
的示例代码。
使用 OpenCV 和 numpy
import numpy as np import cv2 data = findImage(containerName, imageName) print type(data) # <type 'str'> nparr = np.fromstring(data, np.uint8) # if the numpy version is 2.x img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR) # if the numpy version is 3.x img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR) print type(img_np) # <type 'numpy.ndarray'>
使用
PIL.Image
&StringIO
from PIl import Image from StringIO import StringIO data = findImage(containerName, imageName) print type(data) # <type 'str'> img = Image.open(StringIO(data)) print type(img) # <class 'PIL.PngImagePlugin.PngImageFile'>
希望对您有所帮助。