【问题标题】:Data type changes when saving a binary image保存二值图像时数据类型发生变化
【发布时间】:2021-12-23 09:24:11
【问题描述】:

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

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?

谢谢。

【问题讨论】:

  • 您正在尝试将其保存为 jpg,我认为这里的问题是 jpg 的压缩,它生成的比例尺接近像素的“区域”..您可以尝试使用“png”(我相信它没有压缩)或只是将图像保存为矩阵文件...

标签: matlab binary type-conversion grayscale


【解决方案1】:

不要将您的二进制图像写入 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']);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 2022-08-21
    • 2018-08-18
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多