2009-12-04 186 views
9

我想表明它的圖像和情節的東西,然後將其保存爲具有相同大小的原始圖像。我的MATLAB代碼是:如何保存繪圖圖像並在MATLAB中保持原始圖像大小?

figH = figure('visible','off'); 
imshow(I); 
hold on; 
% plot something 
saveas(figH,'1','jpg'); 
close(figH); 

但是結果圖像「1.jpg」保存了圖像中的非圖像區域以及圖像。我怎麼解決這個問題?

+0

多少大?一個數量級?一小部分? – Doresoom 2009-12-04 17:38:55

+0

對不起,我的意思是不保存圖中的非圖像區域。 – Tim 2009-12-04 18:53:34

回答

14

的原因,你的新形象是大於你原來是因爲SAVEAS函數保存整個數字窗口,不只是軸的內容(這是顯示圖像的位置)。

你的問題是非常相似的另一個SO question,所以我會首先指出這些答案包含兩個主要的選項:

  • 修改原始圖像數據:您的圖像數據存儲在可變I,這樣就可以直接修改I的圖像的像素值,然後使用IMWRITE保存修改後的圖像數據。你可以做到這一點的方式my answerLiorH's answer描述。該選項對於圖像的簡單修改(如添加矩形,就像該問題所關注的那樣)最適合。

  • 修改圖形的保存方式:您還可以修改保存圖形的方式,使其更好地匹配原始圖像的尺寸。你可以這樣做(使用PRINTGETFRAME功能,而不是SAVEAS)的途徑,將在答案從AzimjacobkoSCFrench描述。如果您使用文本標籤,箭頭或其他更多涉及的繪圖對象覆蓋圖像,則此選項是您想要執行的操作。

通過保存整個圖形來使用第二個選項可能會非常棘手。具體來說,如果您在一個小窗口(比如700×700像素)繪製一個大圖像(比如1024×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 c r]); %# 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上應該有一個紅色星號,並應具有相同的尺寸與輸入圖像。

+0

謝謝,gnovice,我嘗試了Azim的方法。非圖像區域消失,但保存的圖像與原始圖像的分辨率不同。這能解決嗎?問候! – Tim 2009-12-04 19:18:23

+0

@Tim:我基本上結合阿齊姆的和SCFrench的建議,並增加了一個新的解決方案,我的回答以上。希望這會爲你照顧好。 – gnovice 2009-12-04 20:00:08

相關問題