Search code examples
pythonpython-3.xmatplotlibimread

matplotlib changes jpg image color


I'm reading images from filesystem using matplotlib imread function. However, it changes jpg image color when it displays those images. [Python 3.5, Anaconda3 4.3, matplotlib2.0]

# reading 5 color images of size 32x32
imgs_path = 'test_images'
test_imgs = np.empty((5,32,32,3), dtype=float)
img_names = os.listdir('test_images'+'/')
for i, img_name in enumerate(img_names):
    #reading in an image
    image = mpimg.imread(imgs_path+'/'+img_name)
    test_imgs[i] = image

#Visualize new raw images
plt.figure(figsize=(12, 7.5))
for i in range(5):
    plt.subplot(11, 4, i+1)
    plt.imshow(test_imgs[i]) 
    plt.title(i)
    plt.axis('off')
plt.show()

It is adding a bluish/greenish tint to all the images. Any mistake I'm doing?


Solution

  • matplotlib.image.imread or matplotlib.pyplot.imread read the image as unsigned integer array.
    You then implicitely convert it to float.

    matplotlib.pyplot.imshow interpretes arrays in both formats differently.

    • float arrays are interpreted between 0.0 (no color) and 1.0 (full color).
    • integer arrays are interpreted between 0 and 255.

    The two options you have are thus:

    1. Use an integer array

      test_imgs = np.empty((5,32,32,3), dtype=np.uint8)
      
    2. divide the array by 255. prior to plotting:

      test_imgs = test_imgs/255.