Pillow - 带有 Numpy 的机器学习

  • 简述

    在本章中,我们使用 numpy 来存储和操作图像数据,使用 python 图像库 - “pillow”。
    在继续本章之前,以管理员模式打开命令提示符并在其中执行以下命令以安装 numpy -
    
    pip install numpy
    
    Note− 仅当您安装并更新了 PIP 时才有效。
  • 从 Numpy 数组创建图像

    使用 PIL 创建 RGB 图像并将其保存为 jpg 文件。在以下示例中,我们将 -
    • 创建一个 150 x 250 像素的阵列。
    • 用橙色填充数组的左半部分。
    • 用蓝色填充数组的右半部分。
    
    from PIL import Image
    import numpy as np
    arr = np.zeros([150, 250, 3], dtype=np.uint8)
    arr[:,:100] = [255, 128, 0]
    arr[:,100:] = [0, 0, 255]
    img = Image.fromarray(arr)
    img.show()
    img.save("RGB_image.jpg")
    

    输出

    numpy 数组
  • 创建灰度图像

    创建灰度图像与创建 RGB 图像略有不同。我们可以使用二维数组来创建灰度图像。
    
    from PIL import Image
    import numpy as np
    arr = np.zeros([150,300], dtype=np.uint8)
    #Set grey value to black or white depending on x position
       for x in range(300):
          for y in range(150):
             if (x % 16) // 8 == (y % 16)//8:
                arr[y, x] = 0
             else:
                arr[y, x] = 255
    img = Image.fromarray(arr)
    img.show()
    img.save('greyscale.jpg')
    

    输出

    灰度
  • 从图像创建 numpy 数组

    您可以将 PIL 图像转换为 numpy 数组,反之亦然。下面说明了一个演示相同的小程序。

    例子

    
    #Import required libraries
    from PIL import Image
    from numpy import array
    #Open Image & create image object
    img = Image.open('beach1.jpg')
    #Show actual image
    img.show()
    #Convert an image to numpy array
    img2arr = array(img)
    #Print the array
    print(img2arr)
    #Convert numpy array back to image
    arr2im = Image.fromarray(img2arr)
    #Display image
    arr2im.show()
    #Save the image generated from an array
    arr2im.save("array2Image.jpg")
    

    输出

    如果将上述程序保存为 Example.py 并执行 -
    • 它显示原始图像。
    • 显示从中检索到的数组。
    • 将数组转换回图像并显示它。
    • 由于我们使用了 show() 方法,因此使用默认的 PNG 显示实用程序显示图像,如下所示。
    
    [[[ 0 101 120]
    [ 3 108 127]
    [ 1 107 123]
    ...
    ...
    [[ 38 59 60]
    [ 37 58 59]
    [ 36 57 58]
    ...
    [ 74 65 60]
    [ 59 48 42]
    [ 66 53 47]]
    [[ 40 61 62]
    [ 38 59 60]
    [ 37 58 59]
    ...
    [ 75 66 61]
    [ 72 61 55]
    [ 61 48 42]]
    [[ 40 61 62]
    [ 34 55 56]
    [ 38 59 60]
    ...
    [ 82 73 68]
    [ 72 61 55]
    [ 63 52 46]]]
    
    Original Image
    原始图像
    Image constructed from the array
    建造