我的目标是:
- 创造一个不可见的人物
- 使用子图,在其上绘制图像,然后
- 保存它而不打开它。
因此,我正在运行以下代码:
f = figure('Visible', 'off');
subplot(2, 2, 1), imshow(image1);
subplot(2, 2, 2), imshow(image2);
subplot(2, 2, 3), imshow(image3);
subplot(2, 2, 4), imshow(image4);
saveas(f, 'filename');
但是我得到错误:
Error using imshow (line xxx)
IMSHOW unable to display image.
这意味着 imshow 正在尝试显示图像。有没有办法让imshow
不可见的图形中显示图像而不尝试弹出?
这将起作用,
f = figure('Visible', 'off');
subplot(2, 2, 1), image(image1);
subplot(2, 2, 2), image(image2);
subplot(2, 2, 3), image(image3);
subplot(2, 2, 4), image(image4);
saveas(f, 'filename');
In case of gray scale images
f = figure('Visible', 'off');
subplot(2, 2, 1), image(image1),colormap(gray);
subplot(2, 2, 2), image(image2),colormap(gray);
subplot(2, 2, 3), image(image3),colormap(gray);
subplot(2, 2, 4), image(image4),colormap(gray);
saveas(f, 'filename');
imagesc() 也可以代替 image() 函数
当我
在nodisplay模式下运行Matlab时,我会收到同样的错误。我的解决方法是使用图像作为纹理映射绘制表面网格:
function varargout = imshow_nodisp(im)
% An IMSHOW implementation that works even when Matlab runs -nodisplay.
%
% Only we don't scale the figure window to reflect the image size. Consequently
% the ugly pixel interpolation is directly apparent. IMSHOW has it too, but it
% tries to hide it by scaling the figure window at once.
%
% Input arguments:
% IM HxWxD image.
%
% Output arguments:
% HND Handle to the drawn image (optional).
%
[h,w,~] = size(im);
x = [0 w; 0 w] + 0.5;
y = [0 0; h h] + 0.5;
z = [0 0; 0 0];
hnd = surf(x, y, z, flipud(im), 'FaceColor','texturemap', 'EdgeColor','none');
view(2);
axis equal tight off;
if nargout > 0
varargout = hnd;
end
end
对于任何登陆这里的人。在为此苦苦挣扎之后,我设法从mathworks获得了对此的支持。解决方案很简单。您还需要将轴可见性设置为关闭。
例如
f = figure('Visible', 'off');
a = axes('Visible','off'); ### <-- added this line of code
subplot(2, 2, 1), imshow(image1);
subplot(2, 2, 2), imshow(image2);
subplot(2, 2, 3), imshow(image3);
subplot(2, 2, 4), imshow(image4);
saveas(f, 'filename');