在旧版本的代码中,我曾经使用给定的分辨率执行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');
它还接受文档中指定的自定义分辨率和渲染器。
答案 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');