Python 3.x misc.imread和misc.imsave更改像素值
我是:Python 3.x misc.imread和misc.imsave更改像素值,python-3.x,image-processing,scipy,Python 3.x,Image Processing,Scipy,我是: 读取灰度图像 执行所有像素值的标准化,然后 保存图像 当我重新打开图像时,我看到不同的像素值 我的代码片段: 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 va
- 读取灰度图像
- 执行所有像素值的标准化,然后
- 保存图像李>
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\u比例
和img\u重新打开
时,我得到不同的值:
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]
问题
为什么保存图像并重新打开后像素值会发生更改?imsave功能会在图像保存到磁盘时重新缩放图像
misc.imsave
功能使用发动机罩下的bytescale
将图像重新缩放到全范围(0255)
这就是为什么重新打开时会得到np.max
255。请参阅文档
跟进:
要在不重新缩放的情况下保留值,您可以尝试使用misc.toimage
函数并按如下方式保存结果:
im = misc.toimage(img_scale, high=np.max(img_scale), low=np.max(img_scale)
im.save('lena_scaled.jpg')
使用misc.imsave
阅读'lena\u scaled.jpg'
时,您可以尝试使用以下方法:
misc.imread('lena_scaled.jpg', mode='I')
I-‘L’(8位像素,黑白)
我相信这对你的灰度图像有用
希望这能有所帮助。scipy提到toimage已被弃用。使用Pillow和fromarray函数:例如,将结果保存为uint8图像:
Image.fromarray(np.uint8(numpyar)).save(resfilepath)