【问题标题】:Convert just the content of a figure to an image in MATLAB在 MATLAB 中仅将图形的内容转换为图像
【发布时间】:2014-05-29 23:10:15
【问题描述】:

我目前在 MATLAB 中使用getframe()frame2im 将图形转换为图像。

我刚刚意识到这几乎就像图形的屏幕截图一样,所有轴和标签也都考虑在内。

如何将图形(又名“情节”)的内容仅转换为图像? 我真的不想先将它们全部保存到文件中。

【问题讨论】:

标签: matlab image-processing matlab-figure


【解决方案1】:

您可以使用getframe / cdata 成语。这样做的目的是,如果您在没有任何参数的 当前帧 焦点上调用 getframe,它将返回一个结构给您,其中包含一个名为 cdata 的结构元素。这存储了只是图形内容本身的RGB像素数组。不会捕获轴和标签 - 仅捕获绘制在图形上的内容。

下面是一个帮助您入门的示例:

im = imread('cameraman.tif');
imshow(im);
h = getframe;
out = h.cdata;
figure;
imshow(out); %// Should give you the contents within the imshow frame.

FWIW,我在这里也回答了同样的问题,虽然是针对不同的情况:keep new image when drawing lines by dragging the mouse in matlab

【讨论】:

  • 在 Divakar 的链接之后,我使用了set(gca, 'visible', 'off'),它也很有效。现在不知道哪个更正确。
【解决方案2】:

据我所知,cdata 不起作用。我最近遇到了同样的问题 - 我能找到的唯一解决方法是在使用 getframe 和 cdata 后裁剪每个图像 - 这对于大小相同的图像(虽然丑陋 - 你只需要找到图像中的灰色边缘),但如果图像都不同,这将不起作用(好吧,它不会很好。可能有一些方法可以自动调整裁剪大小)

【讨论】:

  • 如果只有一个情节cdata 将起作用,我假设这就是 OP 打算捕获的内容。显然,如果有多个子图,那么这是行不通的。此外,FWIW,这真的应该放在评论中。这没有回答 OP 提出的问题。
  • cdata 抢边界,这正是 OP 不想要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2017-10-08
  • 2012-06-19
  • 2013-09-18
相关资源
最近更新 更多