Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中保存绘制的图像并保持原始图像大小?

我想显示一张图像并在其上绘制一些内容,然后将其另存为与原始图像大小相同的图像。我的MATLAB代码是:

figH = figure('visible','off'); imshow(I); hold on; % plot something saveas(figH,'1','jpg'); close(figH); 但是,生成的图像“ 1.jpg”已保存了绘图中的非图像区域以及图像。我怎么解决这个问题?


回答:
您的新图像大于原始图像的原因是因为SAVEAS功能保存了整个图形窗口 ,而不是保存了轴的内容(显示图像的位置)。

您的问题与另一个SO问题非常相似,因此我将首先指出这些答案包含的两个主要选项:
  • 修改原始图像数据:您的图像数据存储在变量I ,因此您可以直接修改I的图像像素值,然后使用IMWRITE保存修改后的图像数据。 我的答案LiorH的答案中都描述了您执行此操作的方法。此选项最适合图像的简单修改(例如,考虑到该问题,添加矩形)。
  • 修改图形的保存方式:您还可以修改图形的保存方式,使其与原始图像的尺寸更好地匹配。 AzimjacobkoSCFrench的答案中描述了执行此操作的方法(使用PRINTGETFRAME函数而不是SAVEAS)。如果要用文本标签,箭头或其他涉及更多的绘图对象覆盖图像,则要执行此选项。
通过保存整个图形来使用第二个选项可能很棘手。具体来说,如果您在小窗口(例如700 x 700像素)中绘制大图像(例如1024 x 1024像素),则可能会失去图像分辨率。您必须设置图形和轴属性以适应。这是一个示例解决方案:

I = imread('peppers.png'); %# Load a sample image imshow(I); %# Display it [r,c,d] = size(I); %# Get the image size set(gca,'Units','normalized','Position',[0 0 1 1]); %# Modify axes size set(gcf,'Units','pixels','Position',[200 200 cr]); %# Modify figure size hold on; plot(100,100,'r*'); %# Plot something over the image f = getframe(gcf); %# Capture the current window imwrite(f.cdata,'image2.jpg'); %# Save the frame data 输出图像image2.jpg应带有红色星号,并且其尺寸应与输入图像相同。



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 00:55


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.