如何从 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)

我试图让 blob 流或路径仍然有同样的问题。这个 Blob 需要重新整形为实际图像大小并传递给另一个处理函数。 如果有人帮助我理解问题和可能的解决方案,我将不胜感激。

您从 Azure Blob Storage 下载的 PNG 文件是一个 png 格式的二进制字节字符串,您需要使用 OpenCV & Numpy 将其转换为 numpy 数组或 PIL.Image 对象。

这是我使用 OpenCV 和 numpy 或 PIL.Image 的示例代码。

  1. 使用 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'>
    
  2. 使用 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'>
    

希望对您有所帮助。