我使用这些代码生成灰度级在50到170之间的RGB图像。
a='C:\Users\sepideh\Desktop\IP_abadpour\S45C-113050518040.jpg';
b=imread(a);
b=b+50;
b(b>170)=170;
并且当我调用函数max和min时,你会看到灰度级介于50和170之间。
max(max(max(b)))
ans =
170
min(min(min(b)))
ans =
50
然后我使用imshow和imsave函数来保存图像的名称" 50to170"
c=imshow(b);
d=imsave(c);
现在我以这种方式阅读书面图像:
a='C:\Users\sepideh\Desktop\IP_abadpour\50to170.jpg';
b=imread(a);
这次我调用max和min函数时,我看到:
max(max(max(b)))
ans =
235
min(min(min(b)))
ans =
16
我的意思是在使用imshow和imsave函数后,灰度级似乎已经改变了! 为什么会这样? 是因为我在使用imsave函数时使用的格式(.jpg)?
答案 0 :(得分:1)
不使用imsave,而是使用imwrite
b=imread(a);
b=b+50;
b(b>170)=170;
imwrite(b,'50to170.png','png')
请注意,我将其保存为png文件而不是jpg以防止压缩。 Bitmap还可以在不压缩的情况下保存它
这种方法比使用imshow和imsave更直接地保存原始图像矩阵。
如果你想要相同的imsave功能(选择文件的位置),请查看“uiputfile”以获取文件名和位置。
答案 1 :(得分:0)
我测试了它。
1.首先,你不能使用imsave(b),因为函数imsave期望它的第一个输入参数是单个图形对象的有效句柄。所以首先你应该以c = imshow(b)的形式显示图像。然后使用c作为函数imsave的输入
2.如果要保存图像而不显示图像,请首先使用“imwrite”功能并将b作为第一个输入参数传递给它。
请注意,如果您不想在保存后更改灰度级,则应使用“bmp”作为保存格式而不是“jpg”。
因为'jpg'不支持索引图像,并且“imwrite”在将数据写入JPEG文件之前将索引图像转换为RGB,因此灰度级可能会改变。当在matlab中显示图像时,它与对比度拉伸无关。它与用于保存图像的格式。