将图形保存到具有特定分辨率的文件
Save a figure to file with specific resolution
在我的旧版本代码中,我曾经使用给定的分辨率执行 hardcopy()
,即:
frame = hardcopy(figHandle, ['-d' renderer], ['-r' num2str(round(pixelsperinch))]);
作为参考,hardcopy
将图 window 保存到文件。
然后我通常会执行:
ZZ = rgb2gray(frame) < 255/2;
se = strel('disk',diskSize);
ZZ2 = imdilate(ZZ,se); %perform dilation.
Surface = bwarea(ZZ2); %get estimated surface (in pixels)
这一直有效,直到我切换到 Matlab 2017,其中不推荐使用 hardcopy()
函数,我们只剩下 print()
函数。
我无法使用 print
在特定分辨率下从图形处理程序中提取数据。我尝试了很多东西,包括:
frame = print(figHandle, '-opengl', strcat('-r',num2str(round(pixelsperinch))));
但是没用。我该如何克服这个问题?
编辑
我不想'save'也不想创建图形文件,我的目的是从图形中提取数据,以便在膨胀过程后测量曲面。我只是想保留这些信息,因为我正在处理很多不同的轨迹(总共大约 1e7 个轨迹),我不想将每个文件保存到磁盘(这很昂贵,执行时间)。我 运行 这段代码在远程服务器上(没有显卡)。
我遇到的问题是:"One or more output arguments not assigned during call to "varargout"."
getframe()
不允许设置特定分辨率(据我所知它使用当前分辨率)
EDIT2
好的,知道怎么做了,你需要像这样传递'-RGBImage'参数:
frame = print(figHandle, ['-' renderer], ['-r' num2str(round(pixelsperinch))], '-RGBImage');
它还接受文档中指定的自定义分辨率和渲染器。
我认为您也必须指定格式类型(在我的例子中是 -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');
在我的旧版本代码中,我曾经使用给定的分辨率执行 hardcopy()
,即:
frame = hardcopy(figHandle, ['-d' renderer], ['-r' num2str(round(pixelsperinch))]);
作为参考,hardcopy
将图 window 保存到文件。
然后我通常会执行:
ZZ = rgb2gray(frame) < 255/2;
se = strel('disk',diskSize);
ZZ2 = imdilate(ZZ,se); %perform dilation.
Surface = bwarea(ZZ2); %get estimated surface (in pixels)
这一直有效,直到我切换到 Matlab 2017,其中不推荐使用 hardcopy()
函数,我们只剩下 print()
函数。
我无法使用 print
在特定分辨率下从图形处理程序中提取数据。我尝试了很多东西,包括:
frame = print(figHandle, '-opengl', strcat('-r',num2str(round(pixelsperinch))));
但是没用。我该如何克服这个问题?
编辑
我不想'save'也不想创建图形文件,我的目的是从图形中提取数据,以便在膨胀过程后测量曲面。我只是想保留这些信息,因为我正在处理很多不同的轨迹(总共大约 1e7 个轨迹),我不想将每个文件保存到磁盘(这很昂贵,执行时间)。我 运行 这段代码在远程服务器上(没有显卡)。
我遇到的问题是:"One or more output arguments not assigned during call to "varargout"."
getframe()
不允许设置特定分辨率(据我所知它使用当前分辨率)
EDIT2 好的,知道怎么做了,你需要像这样传递'-RGBImage'参数:
frame = print(figHandle, ['-' renderer], ['-r' num2str(round(pixelsperinch))], '-RGBImage');
它还接受文档中指定的自定义分辨率和渲染器。
我认为您也必须指定格式类型(在我的例子中是 -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');