在Python中缩放图像会使图像变暗
你好 我有一个通过深入学习过程产生的形象。图像为RGB,图像的值范围为-0.28到1.25。通常,我会重新缩放图像,使值为介于0和1之间的浮点或介于0和255之间的整数。然而,我发现在我目前的实验中,这样做会使我的图像变得更暗。图像类型为np.array(float64) 如果使用matplotlib.pyplot打印图像,则原始图像的值会被剪裁,但图像不会变暗 问题是我无法保存此版本的图像。plt.imsave('image.png',art)给出了一个错误 当我缩放图像时,我得到下面的输出,它是暗的。可以使用plt.imsave()保存此图像 这是我的缩放函数:在Python中缩放图像会使图像变暗,python,matplotlib,image-processing,Python,Matplotlib,Image Processing,你好 我有一个通过深入学习过程产生的形象。图像为RGB,图像的值范围为-0.28到1.25。通常,我会重新缩放图像,使值为介于0和1之间的浮点或介于0和255之间的整数。然而,我发现在我目前的实验中,这样做会使我的图像变得更暗。图像类型为np.array(float64) 如果使用matplotlib.pyplot打印图像,则原始图像的值会被剪裁,但图像不会变暗 问题是我无法保存此版本的图像。plt.imsave('image.png',art)给出了一个错误 当我缩放图像时,我得到下面的输出
def scale(img):
return((img - img.min())/(img.max() - img.min()) * 255)
我的问题是:
1) 为什么我不能在第一张(明亮的)图像中保存我的图像?如果存在缩放问题,则:
2) 为什么缩放会使图像变暗
非常感谢你的帮助
1) 为什么我不能在第一个(明亮的)图像中保存我的图像
在回答这个问题时,很难不看到您得到的具体错误,但我猜这可能与图像中的值范围有关。可能负值是一个问题,或者您同时具有负浮点和大于1的浮点
如果我在[-0.28,1.25]
范围内创建一些伪RGB图像数据,并尝试使用plt.imsave()
保存它,我会得到以下错误:
ValueError: Floating point image RGB values must be in the 0..1 range.
2) 为什么缩放会使图像变暗
缩放图像的像素值可能会改变外观
假设您有一个浅色图像,图像中的值范围为[200255]
。缩放值时,将值从[0255]
展开,现在将以前明亮的像素(大约200
)映射为黑色(0
)。如果你有一个一般明亮的图像,缩放后会显得更暗。你似乎就是这样
附带说明:如果你正在做大量与图像相关的工作,我建议使用枕头或OpenCV而不是Matplotlib:)
编辑
正如@alkasm在a中指出的,当您使用plt.imshow()
显示图像时,值会被剪裁。这意味着第一个图像将所有负值映射为0,所有大于1的值映射为1。对第一幅图像进行剪裁和饱和,使其看起来比应有的暗像素和亮像素更多
因此,并不是第二张图像较暗,而是第一张图像显示不正确。注意:“超出范围的RGB(A)值被剪裁。”因此,在
imshow()
中,OP的图像实际上被视为[0..1]。因此,所有负值都映射为0,所有值>1都映射为1。OPs图像因此在末端被“剪裁”或“饱和”,这就是为什么它比映射全范围时的亮度和暗度更高的原因——这不是因为图像在强度上发生了上移(更亮)。但是,剪裁应该只在使用plt.imshow()
显示时发生,所以我不确定这是否会影响缩放后的图像值。对,OP就是这么说的。我只是简单地说明了在这种情况下缩放后对比度差异的原因是因为在imshow()
中进行了剪切。啊,我以为你在谈论第二幅图像。很好,我做了一个编辑。很好,回答很好!