2012-08-27 64 views
3

我正在使用imagesc來獲取完整圖像。然而,我只是設法顯示它,然後我必須手工保存它,我找不到用imwrite或imsave從腳本中保存圖像的方法。它有可能嗎?在Matlab中保存imagesc輸出

代碼:

image='C:\image.jpg'; 
in1= imread((image)); 
in=rgb2gray(in1); 
in_in= cumsum(cumsum(double(in)), 2); 
figure, imagesc(in_in); 
+2

當您嘗試使用imwrite時會出現什麼錯誤? – tmpearce

+1

沒有錯誤,保存的圖像只是空的 – George

+0

@George你是什麼意思爲空? 0字節文件?全白?全黑? – carandraug

回答

6

您也可以使用打印命令。例如,如果你正在運行在多個圖像,並要序列他們救出來,你可以這樣做:

% Create a new figure 
figure (fig_ct) 
% Plot your figure 

% save the figure to your working directory 
eval(['print -djpeg99 ' num2str(fig_ct)]); 
% increment the counter for the next figure 
fig_ct = fig_ct+1; 

其中fig_ct只是一個計數器。如果你有興趣用另一種不同於jpeg的格式保存,請查看文檔,你可以做tiff,eps等等。

希望這有助於

+0

謝謝,它確實有幫助! – George

+4

函數語法('print(gcf,'-djpeg99',num2str(fig_ct))')應該(幾乎)總是優先於使用'eval' – tmpearce

+0

謝謝!將考慮將我的腳本更改爲首選用法。 – Malife

4

我相信你的問題可能是,你要保存的雙重矩陣,是不是對[0 1]範圍內的事實。如果讀出的documentation,你會看到一個

如果輸入數組是類的雙,並且圖像是灰度或 RGB彩色圖像,imwrite假定動態範圍爲[0,1]和 在將數據寫入文件之前會自動將數據縮放255,然後將其作爲 的8位值。

您可以自己將其轉換爲支持的類型(這是合乎邏輯的,UINT8,UINT16,或雙),或者把它的範圍是[0 1],例如,將其除以最大:

imwrite (in_in/max (in_in(:)), 'out.jpg'); 

您可能仍希望進一步增加您保存的圖像的動態範圍。例如,在除以最大值之前減去最小值。

in_in = in_in - min (in_in(:)); 
in_in = in_in/max (in_in(:)); 
imwrite (in_in, 'out.jpg'); 

如果你想要什麼imagesc顯示

imagesc函數的圖像數據擴展到全系列當前的色彩表。

我不知道它到底是什麼意思,而是調用imagesc請求1個變量,然後檢查圖像句柄以查看顏色映射並將其傳遞到imwrite()

+0

謝謝你的解決方案,最重要的是解釋! :) – George

1

我是一個很新的程序員,所以道歉提前如果這是不是非常有幫助,但我有同樣的問題,並設法弄明白。我使用uint8將其轉換爲這樣:

imwrite(uint8(in_in), 'in_in.jpg', 'jpg');