【问题标题】:MATLAB - write image into an eps fileMATLAB - 将图像写入 eps 文件
【发布时间】:2011-01-29 12:50:36
【问题描述】:

在MATLAB中,如何将矩阵写入EPS格式的图像?

imwrite 好像不支持 EPS。

Convert 在我使用的 Linux 服务器上不起作用:

$ convert exploss_stumps.jpg exploss_stumps.eps
convert: missing an image filename `exploss_stumps.eps' @ convert.c/ConvertImageCommand/2838

为什么?


我在终端模式下尝试了gnovice的想法:

    figH = figure('visible','off') ;
imshow(img,'border','tight',...      %# Display in a figure window without
        'InitialMagnification',100);  %#    a border at full magnification
print(strcat(filepath,'/', dataset,'_feature_',num2str(j), '.eps'),'-depsc2');
    close(figH) ;

但是我得到了:

???在 191 处使用 ==> 时出错
IMSHOW 需要 Java 才能运行。

==> study_weaker 中的错误为 122
imshow(img,'border','tight',... %#在没有

的图形窗口中显示 191 错误(eid,'%s 需要 Java 才能运行。',upper(mfilename));

我该如何解决?

【问题讨论】:

  • 尝试使用 SciPy 做同样的事情?先保存为文本,然后使用 Asymptote 或转换 unix 命令?
  • 谢谢!转换效果不佳。
  • 请注意,您也可以使用 Java 在“终端”模式下运行。只需使用“-nodesktop”标志而不是“-nojava”标志启动 MATLAB。

标签: image matlab imagemagick eps


【解决方案1】:

一种可能的解决方案是使用IMSHOW 绘制图像,然后使用PRINT 将整个图形打印为.eps:

img = imread('peppers.png');         %# A sample image
imshow(img,'Border','tight',...      %# Display in a figure window without
       'InitialMagnification',100);  %#    a border at full magnification
print('new_image.eps','-deps');      %# Print the figure as a B&W eps

此解决方案的一个缺点是,如果图像太大而无法在屏幕上显示,IMSHOW 会将其缩小以适应,这会降低图像的屏幕分辨率。但是,您可以使用-r<number> option for the PRINT function 调整保存图像的最终分辨率。例如,您可以通过执行以下操作将图形打印为分辨率为 300 dpi 的 Encapsulated Level 2 Color PostScript:

print('new_image.eps','-depsc2','-r300');

编辑:如果您无法使用IMSHOW(或者因为您没有Image Processing Toolbox,或者因为您使用的 MATLAB 模式不允许这样做),请点击此处是创建和打印图形的另一种方法:

img = imread('peppers.png');      %# A sample image
imagesc(img);                     %# Plot the image
set(gca,'Units','normalized',...  %# Set some axes properties
        'Position',[0 0 1 1],...
        'Visible','off');
set(gcf,'Units','pixels',...      %# Set some figure properties
        'Position',[100 100 size(img,2) size(img,1)]);
print(gcf,'new_image.eps','-depsc2','-r300');  %# Print the figure

您还可以查看this documentation,了解在没有显示器的情况下如何打印。

【讨论】:

  • 为避免分辨率变化,您可能可以获取矩阵大小并以像素为单位指定轴大小。
  • @AB:该选项取决于 OP,具体取决于他们想要/需要的 .eps 文件类型。
  • 谢谢! -depsc2 和 -deps 有什么区别?前者更小更不准确吗? yuk的方法如何保持分辨率?
  • @Tim:额外的c 创建彩色图像,而不是黑白图像。 2 创建一个 2 级 eps,这是一种更新的格式,通常创建比 1 级更小的文件。yuk 的建议涉及自己调整轴和图形大小,而不是让 IMSHOW 来做。这可能允许您使数字大于屏幕,但我的 1 显示器设置不允许我大于屏幕尺寸。
  • 不,不工作,抱歉。按照答案中的解决方案进行。
【解决方案2】:

它应该使用 imwrite 工作。不过,您必须添加一个颜色图才能使其工作。

但是,查看帮助页面时,我发现无法使用 imwrite 来编写 EPS 文件。

【讨论】:

    【解决方案3】:

    以下代码可以帮助您将 png 文件转换为 eps。

    fileName = 'FarmerStats'; % your FILE NAME as string
    
    A = imread(fileName,'png');
    set(gcf,'visible','off') %suppress figure
    image(A);                
    axis image               % resolution based on image
    axis off                 % avoid printing axis 
    set(gca,'LooseInset',get(gca,'TightInset')); % removing extra white space in figure
    saveas(gcf,fileName,'epsc');   % save as COLOR eps file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多