misc.imread和misc.imsave更改像素值

问题描述 投票:0回答:1

我是:

  • 读取灰度图像,
  • 然后执行所有像素值的归一化
  • 保存图像。

当我重新打开图像时,我看到不同的像素值。

我的代码片段:

image = misc.imread('lena.jpg')  
maximum = np.max(image) # finds maximum pixel value of image  
img = np.divide(image, maximum) # divide every pixel value by maximum
# scale every pixel value between 0 and 127
img_scale = np.round(img * (np.power(2,7)-1)).astype(int)  
misc.imsave('lena_scaled.jpg', img_scale)  
img_reopen = misc.imread('lena_scaled.jpg')

当我比较img_scaleimg_reopen时,我得到不同的值:

By executing np.max(img_scale), I get 127.
By executing np.max(img_reopen), I get 255
By executing img_scale[0][0], I get [82,82,82]
By executing img_reopen[0][0], I get [156][156][156]

保存图像并重新打开后,为什么像素值会发生变化?

python-3.x image-processing scipy
1个回答
1
投票

imsave函数在保存到磁盘时重新调整图像。

misc.imsave函数使用引擎盖下的bytescale将图像重新缩放到全范围(0,255)。

这就是为什么你重新打开时得到np.max 255的原因。请参阅文档here

后续:要保留您的值而不重新缩放,您可以尝试使用misc.toimage函数并保存结果如下,

im = misc.toimage(img_scale, high=np.max(img_scale), low=np.max(img_scale)
im.save('lena_scaled.jpg')

当您使用'lena_scaled.jpg'阅读misc.imsave时,您可以尝试使用以下内容:

misc.imread('lena_scaled.jpg', mode='I')

我 - 'L'(8位像素,黑色和白色),我认为它适用于您的灰度图像。

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.