首页 > 解决方案 > 二维布尔数组到图像

问题描述

我有一个由布尔值组成的二维数组。对于 fromarray 的模式,mode='1' 和 mode='L' 都不能正常工作。它们都返回一个黑色图像,同时它还应该具有索引指向 True 的白色值。如何获得正确的图像?

    import numpy as np
    from PIL import Image

    maskArr = np.array(arr) * 255

    print(maskArr.shape) # Returns (600, 800)
    print(np.where(maskArr == True)) # Returns a tuple of index of True values.
    maskImg1 = Image.fromarray(maskArr, mode='1')
    maskImg2 = Image.fromarray(maskArr, mode='L')
    maskImg1.save("./maskImg.jpg")
    maskImg2.save("./maskImg2.jpg")

掩码Img1

掩码Img2

标签: pythonimagepython-imaging-library

解决方案


您要确保 maskArr 具有 dtype uint8,并传递mode='L'给 PIL:

maskArr = np.array(arr, dtype=np.uint8) * 255

maskImg =  Image.fromarray(maskArr, mode='L')
maskImg.save("./maskImg.jpg")

目前,您maskArr有 dtype int64,因此 PIL 不知道将 255 视为白色,将 0 视为黑色。

当我使用 运行此代码时arr = [[True, False]*100,[False, True]*100]*100,我得到以下输出:

输出图像


推荐阅读