首页 > 解决方案 > 保存二值图像时数据类型发生变化

问题描述

我将灰度图像转换为二进制图像,如下面的脚本所示:

D = '/folder-path/';
S = dir(fullfile(D,'*.jpg')); 
for k = 1:numel(S)
    F = fullfile(D,S(k).name);
    I = imread(F);
    I2 = im2bw(I);
    imwrite(I2,F);
end

问题是当我尝试读取任何转换为​​二进制并保存到硬盘驱动器的图像时,返回的类型是 uint8!

我认为图像至少会包含两个值,例如 0 和 255,但是当unique(I)在一个图像上运行时,我得到以下结果:

75×1 uint8 column vector

     0
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    35
    36
    37
    38
   217
   218
   220
   221
   222
   223
   224
   225
   226
   227
   228
   229
   230
   231
   232
   233
   234
   235
   236
   237
   238
   239
   240
   241
   242
   243
   244
   245
   246
   247
   248
   249
   250
   251
   252
   253
   254
   255

你认为为什么会这样?如何将保存的图像读取为二进制而不是 uint8?

谢谢。

标签: matlabbinarytype-conversiongrayscale

解决方案


不要将您的二进制图像写入 jpeg 文件,它会被压缩,并且您肯定会在此过程中丢失确切的值。

此外,擦除源文件看起来确实是一种不好的做法。

一种解决方案是将二进制图像保存在同名的 png 文件中。例如:

imwrite(I2, [D s(k).name(1:end-3) 'png']);

在这种情况下,png 只包含零和一。为了能够在查看器中看到您的二进制图像,最好使用 0 和 255:

imwrite(I2*255, [D s(k).name(1:end-3) 'png']);

推荐阅读