matlab - 保存二值图像时数据类型发生变化
问题描述
我将灰度图像转换为二进制图像,如下面的脚本所示:
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?
谢谢。
解决方案
不要将您的二进制图像写入 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']);
推荐阅读
- d3.js - 将 observable d3.js 画笔和焦点示例转换为 jsfiddle
- java - 有没有办法在java或c#中加密和解密阿拉伯字符串?
- java - 在片段中获取 SharedPrefrences 值?
- sqlite - 我们如何才能找到员工曾经休过一个财政年度的长假或更长的假?
- reactjs - 如何从打字稿中的待办事项列表中删除项目
- c - gcc 如何将总和从 1 优化到 100 到 5050
- php - ios发送数据后php服务器没有响应
- angular - Angular 库组件在使用它的应用程序中导致引用错误
- python - Python 字典新索引返回 NaN 值
- java - Spring Boot - WebClient - 多部分响应 - 如何获取二进制数据