【问题标题】:imshow/imwrite changes all pixel values to 1imshow/imwrite 将所有像素值更改为 1
【发布时间】:2021-04-28 22:53:08
【问题描述】:

我有一个用.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 显示图像,我最终也会得到一个空白图像。

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

【问题讨论】:

    标签: matlab octave image-preprocessing octave-gui


    【解决方案1】:

    配置为uint8图片

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

    Image = [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];
    
    Image = uint8(Image);
    
    imwrite(Image, 'D:\image_test_1.jpg')
    imshow(imread('D:\image_test_1.jpg'),'InitialMagnification','fit');
    

    使用 MATLAB R2019b 运行

    【讨论】:

    • 成功了!非常感谢您的准确回答!
    • 没问题,乐于助人。
    • 还有一个问题:)。我发现我可以在这里octave.org/doc/v4.2.0/Loading-and-Saving-Images.html指定t图像的质量。但是当我设置质量值时,我遇到了错误。你知道为什么吗?谢谢
    • 这听起来像是一个单独的问题。
    • @salRad imwrite(Image, 'D:\image_test_1.jpg','Quality',20) 在 MATLAB 上似乎对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    相关资源
    最近更新 更多