我想表明它的圖像和情節的東西,然後將其保存爲具有相同大小的原始圖像。我的MATLAB代碼是:如何保存繪圖圖像並在MATLAB中保持原始圖像大小?
figH = figure('visible','off');
imshow(I);
hold on;
% plot something
saveas(figH,'1','jpg');
close(figH);
但是結果圖像「1.jpg」保存了圖像中的非圖像區域以及圖像。我怎麼解決這個問題?
我想表明它的圖像和情節的東西,然後將其保存爲具有相同大小的原始圖像。我的MATLAB代碼是:如何保存繪圖圖像並在MATLAB中保持原始圖像大小?
figH = figure('visible','off');
imshow(I);
hold on;
% plot something
saveas(figH,'1','jpg');
close(figH);
但是結果圖像「1.jpg」保存了圖像中的非圖像區域以及圖像。我怎麼解決這個問題?
的原因,你的新形象是大於你原來是因爲SAVEAS函數保存整個數字窗口,不只是軸的內容(這是顯示圖像的位置)。
你的問題是非常相似的另一個SO question,所以我會首先指出這些答案包含兩個主要的選項:
修改原始圖像數據:您的圖像數據存儲在可變I
,這樣就可以直接修改I
的圖像的像素值,然後使用IMWRITE保存修改後的圖像數據。你可以做到這一點的方式my answer和LiorH's answer描述。該選項對於圖像的簡單修改(如添加矩形,就像該問題所關注的那樣)最適合。
修改圖形的保存方式:您還可以修改保存圖形的方式,使其更好地匹配原始圖像的尺寸。你可以這樣做(使用PRINT和GETFRAME功能,而不是SAVEAS)的途徑,將在答案從Azim,jacobko和SCFrench描述。如果您使用文本標籤,箭頭或其他更多涉及的繪圖對象覆蓋圖像,則此選項是您想要執行的操作。
通過保存整個圖形來使用第二個選項可能會非常棘手。具體來說,如果您在一個小窗口(比如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
上應該有一個紅色星號,並應具有相同的尺寸與輸入圖像。
多少大?一個數量級?一小部分? – Doresoom 2009-12-04 17:38:55
對不起,我的意思是不保存圖中的非圖像區域。 – Tim 2009-12-04 18:53:34