为什么 matplotlib.pyplot.imsave() 和 matplotlib.pyplot.imshow() 图像质量不同?如何保证同样的质量?

iam*_*mai 7 python matplotlib python-imageio

与 matplotlib.imshow() 相比,似乎 matplotlib.imsave() 使图像变亮。例如,看看下面的代码。

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)
Run Code Online (Sandbox Code Playgroud)

保存的图像“image_new.jpg”(右)比“image.jpg”(左)略亮

图片.jpg image_new.jpg

图片来源:https ://c1.staticflickr.com/9/8191/8424182610_e23dcc6b4d_b.jpg

小智 0

我对你的结果真的很满意。所以我尝试使用 CV2 和 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')
Run Code Online (Sandbox Code Playgroud)

结果: