Search code examples
pythonimagecolorsimshow

python imshow, set certain value to defined color


I have a RGB Image, which I plot with matplotlib.pyplot.imshow and it works fine. But now I want to change the plot, that where the value of the picture is e.g 1, the color of the plot should change to white at all this positions.

Is there a way to do this?


Solution

  • Assuming that your image is a single-channel image rather than a three-channel image, the required task can be performed by defining a palette that maps indices (e.g. gray level intensities or picture values) into colors:

    import numpy as np
    import matplotlib.pyplot as plt
    
    palette = np.array([[  0,   0,   0],   # black
                        [255,   0,   0],   # red
                        [  0, 255,   0],   # green
                        [  0,   0, 255],   # blue
                        [255, 255, 255]])  # white
    I = np.array([[ 0, 1, 2, 0],    # 2 rows, 4 columns, 1 channel
                  [ 0, 3, 4, 0]])
    

    Image conversion is efficiently accomplished through NumPy's broadcasting:

    RGB = palette[I]
    

    And this is how the transformed image looks like:

    >>> RGB
    array([[[  0,  0,    0],  # 2 rows, 4 columns, 3 channels
            [255,  0,    0],
            [  0, 255,   0],
            [  0,   0,   0]],
           
           [[  0,   0,   0],
            [  0,   0, 255],
            [255, 255, 255],
            [  0,   0,   0]]])
    
    plt.imshow(RGB)
    

    enter image description here