将图形保存到具有特定分辨率

时间:2018-02-23 12:06:44

标签: image matlab matlab-figure resolution

在旧版本的代码中,我曾经使用给定的分辨率执行hardcopy(),即:

frame = hardcopy(figHandle, ['-d' renderer], ['-r' num2str(round(pixelsperinch))]);

作为参考,hardcopy将图形窗口保存到文件。

然后我通常会执行:

ZZ = rgb2gray(frame) < 255/2;
se = strel('disk',diskSize);
ZZ2 = imdilate(ZZ,se); %perform dilation.
Surface = bwarea(ZZ2); %get estimated surface (in pixels)

这一直有效,直到我切换到2017年的Matlab,其中不推荐使用hardcopy()函数,而是使用print()函数。

我无法使用print以特定分辨率从图形处理程序中提取数据。我尝试了很多东西,包括:

frame = print(figHandle, '-opengl', strcat('-r',num2str(round(pixelsperinch))));

但它不起作用。我怎么能克服这个?

修改

我不想'保存'也不想创建图形文件,我的目的是从图中提取数据,以便在扩张过程后测量表面。我只想保留这些信息,因为我正在处理大量不同的轨迹(总共约1e7轨迹),我不想将每个文件保存到磁盘(这是昂贵的,时间执行)。我在远程服务器上运行此代码(没有图形卡)。

我正在努力解决的问题是:"One or more output arguments not assigned during call to "varargout"."

getframe()不允许设置特定分辨率(据我所知,它使用当前分辨率)

EDIT2 好的,想通了怎么做,你需要像这样传递'-RGBImage'参数:

frame = print(figHandle, ['-' renderer], ['-r' num2str(round(pixelsperinch))], '-RGBImage');

它还接受文档中指定的自定义分辨率和渲染器。

1 个答案:

答案 0 :(得分:0)

我认为你也必须指定formattype(在我的例子中是-dtiff)。我在Matlab 2016b中尝试过这一点没有问题:

print(figHandle,'-dtiff', '-opengl', '-r600', 'nameofmyfig'); 

修改 如果您需要CData,只需找到相应轴的手柄并获取其CData

f = findobj('Tag','mytag')

然后根据您的matlab版本使用:

mycdata = get(f,'CData');

或直接

mycdta = f.CData;

编辑2:

您可以以编程方式设置图像的标记,然后执行我之前说过的操作:

a = imshow('peppers.png');
set(a,'Tag','mytag');