3

我正在使用 imagesc 来获取完整的图像。但是,我只能设法显示它,然后我必须手动保存它,我找不到使用 imwrite 或 imsave 从脚本中保存图像的方法。有可能吗?

编码:

image='C:\image.jpg';
in1= imread((image));
in=rgb2gray(in1);
in_in= cumsum(cumsum(double(in)), 2);
figure, imagesc(in_in); 
4

3 回答 3

6

您也可以使用打印命令。例如,如果您正在运行多个图像并想要序列化它们并保存它们,您可以执行以下操作:

% Create a new figure
figure (fig_ct)
% Plot your figure

% save the figure to your working directory
eval(['print -djpeg99 '  num2str(fig_ct)]);
% increment the counter for the next figure
fig_ct = fig_ct+1;

哪里fig_ct只是一个柜台。如果您有兴趣以不同于 jpeg 的另一种格式保存它,请查看文档,您可以使用 tiff、eps 等等。

希望这可以帮助

于 2012-08-27T18:01:11.367 回答
4

我相信您的问题可能在于您正在保存一个不在 [0 1] 范围内的双矩阵。如果您阅读文档,您会看到

如果输入数组是 double 类,并且图像是灰度或 RGB 彩色图像,则 imwrite 假定动态范围为 [0,1] 并在将数据作为 8 位值写入文件之前自动将数据缩放 255。

您可以自己将其转换为受支持的类型(即逻辑、uint8、uint16 或双精度),或者通过例如将其除以最大值将其置于 [0 1] 范围内:

imwrite (in_in / max (in_in(:)), 'out.jpg');

您可能仍想进一步增加您保存的图像的动态范围。例如,在除以最大值之前减去最小值。

in_in = in_in - min (in_in(:));
in_in = in_in / max (in_in(:));
imwrite (in_in, 'out.jpg');

如果您想要确切imagesc显示的内容

imagesc函数将图像数据缩放到当前颜色图的整个范围。

我不知道它到底是什么意思,但调用 imagesc 请求 1 个变量,并检查图像句柄以查看颜色图并将其传递给imwrite().

于 2012-08-27T17:31:34.287 回答
1

我是一个非常新的程序员,所以如果这不是很有帮助,请提前道歉,但我只是遇到了同样的问题并设法解决了。我使用 uint8 像这样转换它:

imwrite(uint8(in_in), 'in_in.jpg', 'jpg');
于 2014-01-22T01:33:02.913 回答