微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

imshow/imwrite 将所有像素值更改为 1

如何解决imshow/imwrite 将所有像素值更改为 1

我有一个.mat 保存的 Matlab 数据集,我试图在 Octave GUI 中处理它。数据由图像组成,我想将它们保存为 JPG 格式(或任何其他图像格式),但是在尝试显示或写入图像时出现这种奇怪的行为。 这是图像的一部分显示为数组的方式:

    91    90    91    88    93
    88    91    86    81    88
    93   100    90    85    91
    93   100    94    93    96
    87    87    87    87    89

但是当我写图像时

imwrite(img,'D:\image_test_1.jpg')

再读一遍

img_read=imread('D:\image_test_1.jpg')

我最终是这样的:

  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1

我尝试寻找原因,但找不到此问题的明确答案或说明。即使我使用 imshow 显示图像,我最终也会得到一张空白图像。

所有像素值发生了什么变化?

解决方法

配置为 uint8 图像

为了表明该图像使用的是 8 位比例/格式,我们可以将数组转换为 uint8()(无符号 8 位整数)。此格式将假定强度值范围为 0 到 255(典型的 JPG 格式)。我认为数组显示为 1 的原因是 Octave 试图将数组解析为从 0 到 1 的双精度值。因此数组的结果达到了 1 的上限,因为 {{ 1}}/Image 数组超出范围(已达到最大值)。或者,我们可以使用 img 函数或将原始数组除以 255 将数组转换为 double。

8-Bit Image Result

im2double()

使用 MATLAB R2019b 运行

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。