pyplot 在 python 中显示调整大小的图像时出现问题

Trouble with pyplot displaying resized images in python

这是我的第一个堆栈溢出问题,如果不是很好请指正:

我目前正在 python 2.7 中将一堆灰度图像处理为 numpy ndarrays (dtype=uint8)。当我使用 resized=misc.imresize(image,.1) 调整图像大小时,当我使用 pyplot 绘制时,生成的图像有时会显示不同的灰度级。这是我的代码的样子。我会 post 结果的图像,但我还没有声望点数:

import cv2
from scipy import misc
from matplotlib import pyplot as plt
image=cv2.imread("gray_image.tif",cv2.CV_LOAD_IMAGE_GRAYSCALE)
resize=misc.imresize(image,.1)
plt.subplot(1,2,1),plt.imshow(image,"gray")
plt.subplot(1,2,2),plt.imshow(resize,"gray")
plt.show()

如果我将图像写入文件,灰度显示正常。
如果我使用 numpy 比较平均灰度级: np.average(image)np.average(resized), 平均灰度值与人们预期的大致相同。 如果我用 cv2.imshow 显示图像,灰度显示正常。

这不仅是调整图像大小的问题,而且当我将图像添加在一起时(当一个图像的大部分是黑色并且不应该使生成的图像变暗时),以及当我构建一个逐像素图像,例如:

import numpy as np
image_copy = np.zeros(image.shape)
for row in range(image.shape[0]):
    for col in range(image.shape[1]):
        image_copy[row,col]=image[row,col]
plt.imshow(image_copy,"gray") #<-- Will sometimes show up darker than original image
plt.show()

有人知道会发生什么吗?

对于这个问题的冗长和不明确,我深表歉意。

imshow 会自动缩放颜色信息以适应整个可用范围。调整大小后,颜色范围变小,导致外观颜色发生变化(而不是实际值,这解释了为什么保存的图像效果很好)。

您可能想告诉 imshow 不要缩放颜色。这可以使用 vminvmax 参数作为 explained in the documentation 来完成。您可能想使用 plt.imshow(image, "gray", vmin=0, vmax=255) 之类的东西来实现不变的外观。