【问题标题】:Save an imagesc output in Matlab在 Matlab 中保存图像输出
【发布时间】:2012-08-22 04:26:19
【问题描述】:

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

代码:

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

【问题讨论】:

  • 您在尝试 imwrite 时遇到什么错误?
  • 没有错误,保存的图片是空的
  • @George 你是什么意思空? 0字节文件?全白?全黑?

标签: image matlab save


【解决方案1】:

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

% 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 等等。

希望对你有帮助

【讨论】:

  • 函数语法 (print(gcf, '-djpeg99', num2str(fig_ct))) 应该(几乎)总是优先于使用 eval
  • 谢谢!将考虑将我的脚本更改为首选用法。
【解决方案2】:

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

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

您可以自己将其转换为支持的类型(即逻辑、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()

【讨论】:

  • 感谢您的解决方案,最重要的是您的解释! :)
【解决方案3】:

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

imwrite(uint8(in_in), 'in_in.jpg', 'jpg');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 2018-06-08
    • 2016-10-31
    • 1970-01-01
    • 2020-11-19
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多