[已答复] 请教关于·imwrite之后的图像再imread时部分像素值改变的原因

[复制链接]
oceam 发表于 2011-8-25 18:55:53
目的是做二值图像
我用zeros(x,y)建立了一个矩阵,把里面对应一些位置改为1,这样就有了下图中上的结果,各个像素值都很正常,imshow出来也没有问题标准的二值图像。然后我就imwrite保存了。结果想继续处理的时候,用imread读取保存的文件,发现里面的一些像素值改变了,不是单纯的二值,而是出现了诸如250,4,6之类的值。使用im2double变化后,如右下,没有任何区别。
请问高手这是为啥子呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

19 条回复


oceam 发表于 2011-8-26 08:57:53
没人遇到过这种情况吗?

oceam 发表于 2011-8-26 09:33:08
求解答啊

zhongwuyanbw 发表于 2011-8-26 10:47:15
为什么你的matlab是日语的呢?

oceam 发表于 2011-8-26 10:51:14

回复 4# zhongwuyanbw 的帖子

系统语言是日语。

oceam 发表于 2011-8-26 10:51:52
总是觉得应该是压缩为jpg图像时的问题,但是不得证实,求真相

lyqmath 发表于 2011-8-26 16:44:56
那是因为你存储时默认是按照uint8数据存储的,读取时也是默认uint8数据,所以你的1变成了255.
建议你存储前用im2uint8(矩阵)变换一下。

oceam 发表于 2011-8-29 09:14:24

回复 7# lyqmath 的帖子

版主,转完之后还是解决不了问题啊。
二值图像进行保存,再读的时候就不是二值了,不管double也好,uint8也好按理说读进去就应该只有0和255,或者0和1两个值,可是它读进来有很多接近0或者255的值。这可如何是好
PS,版主大人,我的问题不是为啥1会变成255,而是原来是255的地方会变成244,242之类,原来0的地方会变成1,5,11之类的

[ 本帖最后由 oceam 于 2011-8-29 09:58 编辑 ]

oceam 发表于 2011-8-29 09:56:59
经过多种测试,基本可以确定就是图像保存格式的问题,如果用bmp图像格式保存的话,再用imread读入就没有这样的问题。
或者对于jpg写入时的imwrite参数做一些修改,比如mode的lossless,quality的100可以获得近似满意的结果。
最后想说的是,如果对你的结果图片还有后续操作需要做的话,最好还是保存为非压缩格式比较好一些,比如bmp,tiff之类。有压缩的图像格式在保存时怎么都会出现错误的说。这一点我在matlab的answers上也得到了证实。

都是一些细小的问题,希望能够引起大家的重视,做到不出错。
尽管估计没啥人看,还是写下来留给万一也发生这样疑问的同学出现。

qiu2069 发表于 2011-8-29 10:22:05
原帖由 oceam 于 2011-8-29 09:56 发表
经过多种测试,基本可以确定就是图像保存格式的问题,如果用bmp图像格式保存的话,再用imread读入就没有这样的问题。
或者对于jpg写入时的imwrite参数做一些修改,比如mode的lossless,quality的100可以获得近似满意的结果。
...

看过,谢谢。

ljpdb 发表于 2012-2-26 10:52:20
oceam 发表于 2011-8-29 09:56
经过多种测试,基本可以确定就是图像保存格式的问题,如果用bmp图像格式保存的话,再用imread读入就没有这 ...

恩,我也是遇到了同样的问题!谢谢分享!

bzyg 发表于 2012-7-13 10:31:52
ljpdb 发表于 2012-2-26 10:52
恩,我也是遇到了同样的问题!谢谢分享!

谢谢了,说不定以后就遇到这样的问题

zhuiqiu_2006 发表于 2012-7-17 12:05:10
非常感谢~~~
谢谢!!!

freshbird 发表于 2012-10-25 10:08:34
oceam 发表于 2011-8-29 09:56
经过多种测试,基本可以确定就是图像保存格式的问题,如果用bmp图像格式保存的话,再用imread读入就没有这 ...

我也遇到同样的问题了,谢谢楼主。

05.10 发表于 2014-3-16 11:27:18
不错,虽然不是我遇到的问题,但是还是感谢楼主让我长知识了

泡面王子 发表于 2015-5-5 15:46:32
看过留名。
我在处理图像时也遇到这个问题,imwrite函数中说明指出输入函数是uint8格式,输出图像按照原值输出。但是输出是jpg格式图像时确实有不正确的像素值。按照作者所说改成bmp格式就能够正确输出了。
感谢!

xixue127 发表于 2015-11-18 11:54:44
oceam 发表于 2011-8-29 09:56
经过多种测试,基本可以确定就是图像保存格式的问题,如果用bmp图像格式保存的话,再用imread读入就没有这 ...

遇到同样的问题,多谢

maxwenn 发表于 2017-2-18 00:50:16
oceam 发表于 2011-8-29 09:56
经过多种测试,基本可以确定就是图像保存格式的问题,如果用bmp图像格式保存的话,再用imread读入就没有这 ...

刚学图像处理的菜鸡我今天也遇见了这个问题。猜了下也是估计保存的时候灰度改变了。看了楼主的帖子就确定了。谢谢楼主。

maxwenn 发表于 2017-2-18 00:52:44
oceam 发表于 2011-8-29 09:56
经过多种测试,基本可以确定就是图像保存格式的问题,如果用bmp图像格式保存的话,再用imread读入就没有这 ...

刚学matlab的菜鸡表示也遇见了这个问题。猜了一下也是估计保存的时候灰度值发生了变化。看了楼主的帖子就确认了。谢谢楼主!

小透明 发表于 2017-5-6 22:12:05
oceam 发表于 2011-8-29 09:56
经过多种测试,基本可以确定就是图像保存格式的问题,如果用bmp图像格式保存的话,再用imread读入就没有这 ...

多谢!困扰我好久的问题。因为平时喜欢拿matlab当做PS来制作喜欢的图片,但是每次imwrite以后的图片都显得不干净,一直不知道只要换成bmp格式就能解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表