Why matplotlib.pyplot.imsave() and matplotlib.pyplot.imshow() image qualities are different? How to ensure the same quality?

Viewed 30310

Seems matplotlib.imsave() lightens the image when compared to that of matplotlib.imshow(). For example, look at the code below.

import imageio
import matplotlib.pyplot as plt
image = imageio.imread('image.jpg')
plt.imshow(image)
plt.imsave('image_new.jpg',image )

image_new = imageio.imread('image_new.jpg')
plt.imshow(image_new)

Saved image 'image_new.jpg' (right) is slightly lighter than 'image.jpg' (left)

image.jpg image_new.jpg

image_source: https://c1.staticflickr.com/9/8191/8424182610_e23dcc6b4d_b.jpg

1 Answers

I am really ok with your result. so I try it with CV2 and matplotlib:

import imageio
import matplotlib.pyplot as plt
import numpy as np
import cv2; import os 
p0 = os.getcwd()
image1 = plt.imread(p0+'\\2.jpg') 
image = plt.imread(p0+'\\2.jpg')[:,:,0]

plt.subplot(141);plt.imshow(image1 );plt.title('Original image')
plt.imsave('image_plt.jpg',image )
imageio.imsave('image_imageio.jpg', image) 
imagecv2 =  image
cv2.imwrite('image_cv2.jpg',imagecv2 )

image_new = plt.imread('image_plt.jpg')[:,:,0]
plt.subplot(2,4,2);plt.title('read after save plt')
plt.imshow(image_new,cmap ='gray')

plt.subplot(2,4,6);plt.title('Diff original image with saved plt')
x=np.abs ( image - image_new)
plt.imshow(x,cmap ='gray')

image_cv2 = plt.imread('image_cv2.jpg')[:,: ]
plt.subplot(2,4,3);plt.title('read after save plt')
plt.imshow(image_new,cmap ='gray')
plt.subplot(2,4,7);plt.title('Diff original image with saved CV2')
x=np.abs ( image - image_cv2)
plt.imshow(x,cmap ='gray')

image_imageio = plt.imread('image_imageio.jpg')
plt.subplot(2,4,4);plt.title('read after save imageio')
plt.imshow(image_new,cmap ='gray')
plt.subplot(2,4,8);plt.title('Diff original image with saved imageio')
x=np.abs ( image - image_imageio)
plt.imshow(x,cmap ='gray')

figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
plt.savefig('diff.jpg')

Results:

Related