MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   如何在MATLAB中保存绘制的图像并保持原始图像大小? (https://www.labfans.com/bbs/showthread.php?t=22957)

poster 2019-12-10 16:49

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

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


回答:
您的新图像大于原始图像的原因是因为[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/saveas.html"]SAVEAS[/URL]功能保存[I]了整个图形窗口[/I] ,而不是保存了轴的内容(显示图像的位置)。

您的问题与另一个[URL="https://stackoverflow.com/questions/575475/how-can-i-save-an-altered-image-in-matlab"]SO问题[/URL]非常相似,因此我将首先指出这些答案包含的两个主要选项:
[LIST][*] [B]修改原始图像数据:[/B]您的图像数据存储在变量I ,因此您可以直接修改I的图像像素值,然后使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/imwrite.html"]IMWRITE[/URL]保存修改后的图像数据。 [URL="https://stackoverflow.com/questions/575475/how-can-i-save-an-altered-image-in-matlab/575519#575519"]我的答案[/URL]和[URL="https://stackoverflow.com/questions/575475/how-can-i-save-an-altered-image-in-matlab/575517#575517"]LiorH的答案中[/URL]都描述了您执行此操作的方法。此选项最适合图像的简单修改(例如,考虑到该问题,添加矩形)。
[*] [B]修改图形的保存方式:[/B]您还可以修改图形的保存方式,使其与原始图像的尺寸更好地匹配。 [URL="https://stackoverflow.com/questions/575475/how-can-i-save-an-altered-image-in-matlab/578541#578541"]Azim[/URL] , [URL="https://stackoverflow.com/questions/575475/how-can-i-save-an-altered-image-in-matlab/575895#575895"]jacobko[/URL]和[URL="https://stackoverflow.com/questions/575475/how-can-i-save-an-altered-image-in-matlab/575649#575649"]SCFrench[/URL]的答案中描述了执行此操作的方法(使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/print.html"]PRINT[/URL]和[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/getframe.html"]GETFRAME[/URL]函数而不是SAVEAS)。如果要用文本标签,箭头或其他涉及更多的绘图对象覆盖图像,则要执行此选项。
[/LIST]通过保存整个图形来使用第二个选项可能很棘手。具体来说,如果您在小窗口(例如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应带有红色星号,并且其尺寸应与输入图像相同。



[url=https://stackoverflow.com/questions/1848176]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 01:03

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