matlab中如何保存(imwrite)二值化的图片,只有0和1两个值的?

a=[1,1 ,1,1,1,1,1,1,1,1,1;0 ,0, 0,0,0,0,0,0,0,0,0;1,1,1,1,1,1,1,1,1,1,1;
0,0,0,0,0,0,0,0,0,0,0;1,1,1,1,1,1,1,1,1,1,1;0,0,0,0,0,0,0,0,0,0,0];一张图片如上数组a所示,只有1和0两个值组成,我想把它保存起来,如果直接保存,那么再读入时就全部都是0和255的分布。将其转换成uint8类型(之所以要转换,是因为我要保存的图片很大,double型数据溢出),用imwrite(a,'1.bmp');之后,图像是黑色的,这种保存方式可能是灰度范围取的是0到255,我想请教一下,怎么样将只有0和1两个值的uint8图片保存起来,并且能够正常显示(不会是全黑)?
那么如何将uint8类型的矩阵a保存成0和1,输出也是0和1呢?

a矩阵中的值是0和1,不知道是什么类型,如果是double型的话你把它转化成uint8的话,那就是它的灰度值就是0和1,你保存后显示当然是黑色;如果是uint8型的话,灰度值0-255,那么0和1肯定是黑色。
我在matlab中输入a矩阵,系统认为它是double型,imwrite(a,'a.bmp');读入保存后的图像如下:
255 255 255 255 255 255 255 255 255 255 255
0 0 0 0 0 0 0 0 0 0 0
255 255 255 255 255 255 255 255 255 255 255
0 0 0 0 0 0 0 0 0 0 0
255 255 255 255 255 255 255 255 255 255 255
0 0 0 0 0 0 0 0 0 0 0
你如果想要0和1的话,直接将读入的图像im2double下,结果如下:
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
如果你将a转化成uint8型,再保存,结果如下:
a=uint8(a)
a =
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0%%转化后,灰度值就为0和1,显示a肯定为全黑
>> imwrite(a,'a.bmp')
>> d=imread('D:\Program Files\work\a.bmp')
d =
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0%%读入的d也为uint8型
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-22
a矩阵中的值是0和1,不知道是什么类型,如果是double型的话你把它转化成uint8的话,那就是它的灰度值就是0和1,你保存后显示当然是黑色;如果是uint8型的话,灰度值0-255,那么0和1肯定是黑色。
我在matlab中输入a矩阵,系统认为它是double型,imwrite(a,'a.bmp');读入保存后的图像如下:
255 255 255 255 255 255 255 255 255 255 255
0 0 0 0 0 0 0 0 0 0 0
255 255 255 255 255 255 255 255 255 255 255
0 0 0 0 0 0 0 0 0 0 0
255 255 255 255 255 255 255 255 255 255 255
0 0 0 0 0 0 0 0 0 0 0
你如果想要0和1的话,直接将读入的图像im2double下,结果如下:
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
如果你将a转化成uint8型,再保存,结果如下:
a=uint8(a)
a =
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0%%转化后,灰度值就为0和1,显示a肯定为全黑
>> imwrite(a,'a.bmp')
>> d=imread('D:\Program Files\work\a.bmp')
d =
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0%%读入的d也为uint8型
第2个回答  2011-01-20
a矩阵中的值是0和1如果是double型的话你把它转化成uint8的话,那就是它的灰度值就是0和1,你保存后显示当然是黑色;如果是uint8型的话,灰度值0-255,那么0和1肯定是黑色。
我在matlab中输入a矩阵,系统认为它是double型,imwrite(a,'a.bmp');读入保存后的图像如下:
255 255 255 255 255 255 255 255 255 255 255
0 0 0 0 0 0 0 0 0 0 0
255 255 255 255 255 255 255 255 255 255 255
0 0 0 0 0 0 0 0 0 0 0
255 255 255 255 255 255 255 255 255 255 255
0 0 0 0 0 0 0 0 0 0 0
你如果想要0和1的话,直接将读入的图像im2double下,结果如下:
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
如果你将a转化成uint8型,再保存,结果如下:
a=uint8(a)
a =
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0%%转化后,灰度值就为0和1,显示a肯定为全黑
>> imwrite(a,'a.bmp')
>> d=imread('D:\Program Files\work\a.bmp')
d =
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0%%读入的d也为uint8
第3个回答  2019-07-03
保存为png格式
第4个回答  2011-01-20
不用他了
相似回答