【问题标题】:How to store a 2D array with values from 0-20 to a grayscale image in python如何将值从0-20的二维数组存储到python中的灰度图像
【发布时间】:2020-03-14 11:19:14
【问题描述】:

我正在做一个图像分割项目,我有一个大小为 (224,224) 的二维数组,其值介于 0-20 之间,每个数字代表数据集的一个类别。我想将此二维数组存储到灰度图像中,并使用相同的 0-20 值将其读回。我找不到合适的方法来做到这一点。我尝试如下,但虽然它存储为灰度图像,但从图像中读取数组时,我无法读回实际的二维数组。

#arr is the 2D array of size (224,224) with values from 0-20     
rescaled = (255.0 / arr.max() * (arr - arr.min())).astype(np.uint8)
img = PIL.Image.fromarray(rescaled)
img.save(filename)

但是当我读回I = np.asarray(PIL.Image.open('filename.png')) 时,我只能看到 0 和 255。我需要 0-20 的值。我怎样才能做到这一点?我试着用cv2.imwrite(filename,arr) 来做,但它给出的只是一张空白图片。

【问题讨论】:

    标签: python-3.x opencv png python-imaging-library cv2


    【解决方案1】:

    你可以试试下面的代码

    #arr is the 2D array of size (224,224) with values from 0-20     
    min_value = arr.min()
    max_Value = arr.max()
    rescaled = (255.0 // (max_Value-min_value)  * (arr - min_value)).astype(np.uint8)
    img = Image.fromarray(rescaled)
    img.save(img_name, "BMP")
    
    import_array = np.asarray(Image.open(img_name), dtype="int32")
    rescaled_import_img = min_value + import_array*(max_Value- min_value)//255 
    print (rescaled_import_img)
    

    近似值有问题。当您将整数值相除时,结果将是浮点数并被四舍五入。当您加载值时,会有差异。我们最好不要缩放值,而是在灰度图像中保留 0-20 个值,稍后再加载。

    更新 1

    无需重新缩放

    img = Image.fromarray(np.uint8(arr))
    img.save(img_name, "BMP")
    print (img)
    
    import_array = np.array(Image.open(img_name), dtype="uint8")
    print (import_array)
    

    【讨论】:

    • 我不想重新缩放,我可以在灰度图像中保持 0-20 值。我怎样才能做到这一点?我做了重新缩放,因为我不知道如何在灰度图像中保留 0-20 值。
    • 谢谢。图像只是空白,但在回读时它按预期工作。
    • 很高兴听到它奏效了。它是黑色的,因为值低于 20,接近黑色灰度值 (0)。
    猜你喜欢
    • 2020-02-21
    • 2015-04-22
    • 2016-10-20
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多