2014-10-10 128 views
2

我有225图像与蒙太奇功能一起放在matlab中。我可以用蒙太奇给他们看。但是我无法将蒙太奇保存为完整的图像,请帮助我。将蒙太奇保存为图像matlab

path = uigetdir; 

D=dir(fullfile(path,'*.tif')); 

imcell = cell(1,numel(D)); 
imcropped = cell(1,numel(D)); 

figure(1); 
title('Drag square to crop picture, end with a double click',... 
    'FontSize', 15 , 'HandleVisibility' , 'off') ; 
axis equal 
set(gca , 'NextPlot' , 'replacechildren') ; 
imcell1 = imread(D(50).name); 
[~, rect] = imcrop(imcell1); 
close(figure(1)); 
% 
for i = 1:numel(D) 
    imcell{i} = imread(D(i).name); 
    imcropped{i} = imcrop(imcell{i}, rect); 
end 

h=montage(cat(4,imcropped{:}),'Size', [15 15]); 

蒙太奇“h”的输出只是一个数字。

回答

0

你快到了!值'h'实际上是您在图中创建的蒙太奇创建的图像对象的句柄。你可以做的是用getframe来捕捉图形的内容(图形对象)并将其保存为图像。这是一个很简单的例子,用后你

h=montage(cat(4,imcropped{:}),'Size', [15 15]); 

MyMontage = getframe(gca) %// Get content of current axes. I did it with sample images. 

输出的代码会直接如下:

MyMontage = 

     cdata: [384x1024x3 uint8] % Yours will be different 
    colormap: [] 

因此,你可以保存实际的数据,存储在CDATA,在一个新的文件你很好走!

imwrite(MyMontage.cdata,'FancyName.tif','tif'); 
+0

非常感谢! – 2014-10-12 09:57:47

+0

非常欢迎! – 2014-10-12 11:25:43

+0

使用getframe的脚本将蒙太奇保存为与GUI相同的大小。有没有办法将蒙太奇保存为真实尺寸? – lroca 2015-02-02 17:48:15

3

我想指出一个更好的方法来做到这一点。虽然Benoit_11的方式在技术上是正确的,但它将图像的分辨率限制在屏幕的大小。当你使用getframe(gca)时,Matlab可以有效截取当前坐标轴的内容,无论你的数字窗口当前处于什么尺寸。

更好的方法是使用句柄,因为它引用了实际的图形输出montage(),而不是它显示的内容。为了从手柄保存图像时,你需要从它引用的对象cdataget

h=montage(cat(4,imcropped{:}),'Size', [15 15]); 
MyMontage = get(h, 'CData'); 
imwrite(MyMontage, 'FancyName.tif', 'tif'); 

这样你显示它得到全分辨率蒙太奇的,不仅仅是分辨率。

有关图像手柄的更多信息:http://www.mathworks.com/help/matlab/creating_plots/the-image-object-and-its-properties.html