我有225张图片与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 :(得分:3)
我想指出一种更好的方法。虽然Benoit_11的方法在技术上是正确的,但它将图像的分辨率限制在屏幕大小。当您使用getframe(gca)
时,Matlab会有效地截取当前轴内容的屏幕截图,无论您的图形窗口当前处于何种大小。
更好的方法是使用句柄,因为它引用montage()
的实际图形输出而不是它显示的内容。要从句柄中保存图像,您需要从cdata
引用的对象中获取get
:
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
答案 1 :(得分: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');