VOC2012: PIL Image.open converts PNG to 2d array

前端 未结 1 1688
情歌与酒
情歌与酒 2021-01-20 01:58

I am working with VOC2012 dataset. The input image is in PNG format which has a shape of (375, 500, 4) when I use imageio to open the image. When I use PIL to open the image

相关标签:
1条回答
  • 2021-01-20 02:49

    Your image is palletised, not RGB. Each pixel is represented by an 8-bit index into a palette. You can see this by looking at image.mode which shows up as P.

    If you want an RGB image, use:

    rgb = Image.open('bike.png').convert('RGB')
    

    If you want and RGBA image with transparency, use:

    RGBA = Image.open('bike.png').convert('RGBA')
    

    However, there is no useful information in the alpha channel, so that seems pointless.


    Regarding the pascal palette, you can get that via PIL like this:

    im = Image.open('bike.png')                                                                 
    
    p = im.getpalette()
    
    for i in range (256): 
        print(p[3*i:3*i+3])
    
    [0, 0, 0]
    [128, 0, 0]
    [0, 128, 0]
    [128, 128, 0]
    [0, 0, 128]
    [128, 0, 128]
    [0, 128, 128]
    [128, 128, 128]
    [64, 0, 0]
    [192, 0, 0]
    [64, 128, 0]
    [192, 128, 0]
    [64, 0, 128]
    [192, 0, 128]
    [64, 128, 128]
    [192, 128, 128]
    [0, 64, 0]
    [128, 64, 0]
    [0, 192, 0]
    [128, 192, 0]
    [0, 64, 128]
    [128, 64, 128]
    [0, 192, 128]
    [128, 192, 128]
    [64, 64, 0]
    [192, 64, 0]
    [64, 192, 0]
    [192, 192, 0]
    [64, 64, 128]
    [192, 64, 128]
    [64, 192, 128]
    [192, 192, 128]
    [0, 0, 64]
    [128, 0, 64]
    [0, 128, 64]
    [128, 128, 64]
    [0, 0, 192]
    [128, 0, 192]
    [0, 128, 192]
    [128, 128, 192]
    [64, 0, 64]
    [192, 0, 64]
    [64, 128, 64]
    [192, 128, 64]
    [64, 0, 192]
    [192, 0, 192]
    [64, 128, 192]
    [192, 128, 192]
    [0, 64, 64]
    [128, 64, 64]
    [0, 192, 64]
    [128, 192, 64]
    [0, 64, 192]
    [128, 64, 192]
    [0, 192, 192]
    [128, 192, 192]
    [64, 64, 64]
    [192, 64, 64]
    [64, 192, 64]
    [192, 192, 64]
    [64, 64, 192]
    [192, 64, 192]
    [64, 192, 192]
    [192, 192, 192]
    [32, 0, 0]
    [160, 0, 0]
    [32, 128, 0]
    [160, 128, 0]
    [32, 0, 128]
    [160, 0, 128]
    [32, 128, 128]
    [160, 128, 128]
    [96, 0, 0]
    [224, 0, 0]
    [96, 128, 0]
    [224, 128, 0]
    [96, 0, 128]
    [224, 0, 128]
    [96, 128, 128]
    [224, 128, 128]
    [32, 64, 0]
    [160, 64, 0]
    [32, 192, 0]
    [160, 192, 0]
    [32, 64, 128]
    [160, 64, 128]
    [32, 192, 128]
    [160, 192, 128]
    [96, 64, 0]
    [224, 64, 0]
    [96, 192, 0]
    [224, 192, 0]
    [96, 64, 128]
    [224, 64, 128]
    [96, 192, 128]
    [224, 192, 128]
    [32, 0, 64]
    [160, 0, 64]
    [32, 128, 64]
    [160, 128, 64]
    [32, 0, 192]
    [160, 0, 192]
    [32, 128, 192]
    [160, 128, 192]
    [96, 0, 64]
    [224, 0, 64]
    [96, 128, 64]
    [224, 128, 64]
    [96, 0, 192]
    [224, 0, 192]
    [96, 128, 192]
    [224, 128, 192]
    [32, 64, 64]
    [160, 64, 64]
    [32, 192, 64]
    [160, 192, 64]
    [32, 64, 192]
    [160, 64, 192]
    [32, 192, 192]
    [160, 192, 192]
    [96, 64, 64]
    [224, 64, 64]
    [96, 192, 64]
    [224, 192, 64]
    [96, 64, 192]
    [224, 64, 192]
    [96, 192, 192]
    [224, 192, 192]
    [0, 32, 0]
    [128, 32, 0]
    [0, 160, 0]
    [128, 160, 0]
    [0, 32, 128]
    [128, 32, 128]
    [0, 160, 128]
    [128, 160, 128]
    [64, 32, 0]
    [192, 32, 0]
    [64, 160, 0]
    [192, 160, 0]
    [64, 32, 128]
    [192, 32, 128]
    [64, 160, 128]
    [192, 160, 128]
    [0, 96, 0]
    [128, 96, 0]
    [0, 224, 0]
    [128, 224, 0]
    [0, 96, 128]
    [128, 96, 128]
    [0, 224, 128]
    [128, 224, 128]
    [64, 96, 0]
    [192, 96, 0]
    [64, 224, 0]
    [192, 224, 0]
    [64, 96, 128]
    [192, 96, 128]
    [64, 224, 128]
    [192, 224, 128]
    [0, 32, 64]
    [128, 32, 64]
    [0, 160, 64]
    [128, 160, 64]
    [0, 32, 192]
    [128, 32, 192]
    [0, 160, 192]
    [128, 160, 192]
    [64, 32, 64]
    [192, 32, 64]
    [64, 160, 64]
    [192, 160, 64]
    [64, 32, 192]
    [192, 32, 192]
    [64, 160, 192]
    [192, 160, 192]
    [0, 96, 64]
    [128, 96, 64]
    [0, 224, 64]
    [128, 224, 64]
    [0, 96, 192]
    [128, 96, 192]
    [0, 224, 192]
    [128, 224, 192]
    [64, 96, 64]
    [192, 96, 64]
    [64, 224, 64]
    [192, 224, 64]
    [64, 96, 192]
    [192, 96, 192]
    [64, 224, 192]
    [192, 224, 192]
    [32, 32, 0]
    [160, 32, 0]
    [32, 160, 0]
    [160, 160, 0]
    [32, 32, 128]
    [160, 32, 128]
    [32, 160, 128]
    [160, 160, 128]
    [96, 32, 0]
    [224, 32, 0]
    [96, 160, 0]
    [224, 160, 0]
    [96, 32, 128]
    [224, 32, 128]
    [96, 160, 128]
    [224, 160, 128]
    [32, 96, 0]
    [160, 96, 0]
    [32, 224, 0]
    [160, 224, 0]
    [32, 96, 128]
    [160, 96, 128]
    [32, 224, 128]
    [160, 224, 128]
    [96, 96, 0]
    [224, 96, 0]
    [96, 224, 0]
    [224, 224, 0]
    [96, 96, 128]
    [224, 96, 128]
    [96, 224, 128]
    [224, 224, 128]
    [32, 32, 64]
    [160, 32, 64]
    [32, 160, 64]
    [160, 160, 64]
    [32, 32, 192]
    [160, 32, 192]
    [32, 160, 192]
    [160, 160, 192]
    [96, 32, 64]
    [224, 32, 64]
    [96, 160, 64]
    [224, 160, 64]
    [96, 32, 192]
    [224, 32, 192]
    [96, 160, 192]
    [224, 160, 192]
    [32, 96, 64]
    [160, 96, 64]
    [32, 224, 64]
    [160, 224, 64]
    [32, 96, 192]
    [160, 96, 192]
    [32, 224, 192]
    [160, 224, 192]
    [96, 96, 64]
    [224, 96, 64]
    [96, 224, 64]
    [224, 224, 64]
    [96, 96, 192]
    [224, 96, 192]
    [96, 224, 192]
    [224, 224, 192]
    

    Then, if you want to make the bicycle red, you can do:

    # Load the image and make Numpy version
    im = Image.open('bike.png') 
    n = np.array(im)
    
    # Make all pixels belonging to bike (2) into red (palette index 9)
    n[n==2] = 9
    # Make all pixels not red (9) into grey (palette index 7)
    n[n!=9] = 7
    
    # Convert back into PIL palettised image and re-apply original palette
    r = Image.fromarray(n,mode='P') 
    r.putpalette(im.getpalette()) 
    r.save('result.png') 
    

    Keywords: Python, PIL, Pillow, image processing, palette, palette operations, masked image, mask, extract palette, apply palette.

    0 讨论(0)
提交回复
热议问题