如何在Linux上运行的MATLAB中使用隐形graphics进行imshow

我的目标是:

  1. 创造一个看不见的身影
  2. 使用小图,绘制图像,然后
  3. 保存它而不用打开它。

因此,我正在运行以下代码:

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显示图像在看不见的身影,而不是试图popup?

Solutions Collecting From Web of "如何在Linux上运行的MATLAB中使用隐形graphics进行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; hh] + 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');