首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >misc.imread和misc.imsave改变像素值

misc.imread和misc.imsave改变像素值
EN

Stack Overflow用户
提问于 2017-12-27 08:28:55
回答 1查看 603关注 0票数 0

我是:

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

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

我的代码片段:

代码语言:javascript
复制
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时,得到了不同的值:

代码语言:javascript
复制
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]

问题

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-27 11:24:56

当图像保存到磁盘时,不保存函数会重新调整图像的标号。

misc.imsave函数使用遮罩下的bytescale将图像重定向到完整范围(0,255)。

这就是当您重新打开np.max 255的原因。请参阅文档这里

后续:为了在不重新缩放的情况下保存您的值,您可以尝试使用misc.toimage函数并将结果保存如下:

代码语言:javascript
复制
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时,可以尝试使用以下方法:

代码语言:javascript
复制
misc.imread('lena_scaled.jpg', mode='I')

我-‘L’(8位像素,黑色和白色),我相信这将适用于你的灰度图像。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47988793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档