matlab 影象儲存函式及使用方法
轉自http://www.ilovematlab.cn/thread-296430-1-1.html
最近看了一些用matlab對圖形圖片進行儲存的帖子和資源,關於影象儲存的方法給大家分享一下這些方法是大家所使用方法的一個總結.
如今常用的方法有三種printf,imwrite,saveas下面分別介紹一下:
imwrite
mwrite將影象資料寫成影象檔案,一般用於影象處理,當我們使用imshow將一副影象使顯示在座標系上時,我們可以使用如下方式儲存影象
I=getimage(gcf); % 獲取座標系中的影象檔案資料
imwrite(I,'myphoto.jpg')%儲存影象為檔案
同時可以使用下面的形式儲存圖片資料,把圖片儲存到指定資料夾,並對檔名進行編號
f=getframe(gcf);
imwrite(f.cdata,['C:\Users\shitao\Desktop\s4\',int2str(i),'.jpg']);
這個函式在視訊分幀時,我經常使用,相對saveas的儲存速度,個人感覺效率比較高,
- clc;close all;clear all;
- Img=imread('1.jpg');
- if ndims(Img)==3
- I=rgb2gray(Img);
- else
- I=Img;
- end
- I=im2bw(I,graythresh(I));
- [m,n]=size(I);
- imshow(I);title('binary image');
- txt=get(gca,'Title');
- set(txt,'fontsize',16);
- L=bwlabel(I);
- stats=regionprops(L,'all');
- set(gcf,'color','w');
- set(gca,'units','pixels','Visible','off');
- q=get(gca,'position');
- q(1)=0;%設定左邊距離值為零
- q(2)=0;%設定右邊距離值為零
- set(gca,'position',q);
- for i=1:length(stats)
- hold on;
- rectangle('position',stats(i).BoundingBox,'edgecolor','y','linewidth',2);
- temp = stats(i).Centroid;
- plot(temp(1),temp(2),'r.');
- drawnow;
- end
- frame=getframe(gcf,[0,0,n,m]);
- im=frame2im(frame);
- imwrite(im,'a.jpg','jpg');%可以修改儲存的格式
複製程式碼
saveas
Matlab提供直接的saveas函式可以將指定figure中的影象或者simulink中的框圖進行儲存,相當於【檔案】中的【另存為】
- % saveas(figure_handle,filename,fileformat)
- plot(1:10);
- saveas(gcf,‘myfig.jpg’)
複製程式碼
它有三種書寫方式
saveas(gcf,['D:\儲存的資料檔案\方法1.png'])
saveas(gcf,['D:\儲存的資料檔案\方法2','.png'])
saveas(gcf,['D:\儲存的資料檔案\','方法3','.png'])
用saveas命令儲存圖片。
Matlab提供直接的saveas函式可以將指定figure中的影象或者simulink中的框圖進行儲存,相當於【檔案】中的【另存為】。
saveas的三個引數:
(1)圖形控制代碼,如果圖形視窗標題欄是“Figure 3”,則控制代碼就是3。
(2)檔名。
(3)單引號字串,指定儲存格式。
例:
% saveas(figure_handle,filename,fileformat) plot(1:10);
>>saveas(gcf,['D:\儲存的資料檔案\方法1.png'])
>> saveas(gcf,['D:\儲存的資料檔案\方法2','.png'])
>> saveas(gcf,['D:\儲存的資料檔案\','方法3','.png'])把圖片儲存到指定目錄並編號
saveas(gcf,['C:\Users\shitao\Desktop\s3\',int2str(i),'.jpg']);
- mov=aviread('C:\Users\shitao\Desktop\s5\2.avi');%讀入視訊
- Vframes=size(mov,2);%讀取視訊的幀數
- figure
- for i=1:Vframes
- % strtemp=strcat('C:\Users\shitao\Desktop\s2\',int2str(i),'.','jpg');%將每幀轉成.jpg的圖片
- I=mov(i).cdata;
- imshow(I);
- %此處新增影象處理內容,如對影象畫框,畫線等操作
- saveas(gcf,['C:\Users\shitao\Desktop\s2\',int2str(i),'.jpg']);
- %imwrite(mov(i).cdata(:,:,:),strtemp); %把影象寫入磁碟
- end
複製程式碼
saveas與imwrite的區別
saveas(handle,['目錄','檔名'])
如果只有一幅圖,handle設為gcf
如果有多副,handle需單獨設定
imwrite(image_data,['directory','filename'])
需要與getframe連用
兩個命令都可以用來儲存影象,區別在於
1、背景色:saveas儲存的影象 背景色自動設定為白色,imwrite儲存影象為所見即所得
2、影象大小: saveas無視你設定的影象大小,按預設儲存,imwrite儲存所見即所得
contrast example:在當前目錄下image資料夾下找到兩個影象,對比一下
clear
clc
x=0:pi/100:2*pi;
y=sin(x);
h=plot(x,y); % h為plot線的控制代碼handle
set(gcf,'position',[80,100,400,600])
% 將影象設定為距螢幕左下角 [80,畫素
% 影象大小設定為400*600畫素
set(gcf,'color',[1,1,1]) % 背景色設定為白色
mkdir image
% 在當前資料夾下新建image資料夾,如果已存在會warning,不影響執行
% ========================
saveas(gcf,['image','test1.jpg'])
% ========================
f=getframe(gcf);
imwrite(f.cdata,['image','test2.jpg'])
複製程式碼 printf
用法:print(圖形控制代碼,儲存格式,檔名);
- 圖形控制代碼,如果圖形視窗標題欄是“Figure 3”,則控制代碼就是3.用gcf可以獲取當前視窗控制代碼。
- 指定儲存格式。常用的有:
- png格式:‚-dpng‘ (推薦這一種,與bmp格式一樣清晰,檔案也不大)
- jpeg: ‚-djpeg‘(檔案小,較清晰)
- tiff: ‚-dtiff‘
- bmp: ‚-dbitmap‘(清晰,檔案極大)
- gif: ‚-dgif‘(檔案小但不清晰)
例如
- <font color="#000000" size="2">% print(figure_handle,fileformat,filename)
- x=-pi:2*pi/300:pi;
- y=sin(x);
- plot(x,y);
- %Matlab根據副檔名,自動儲存為相應格式圖片,另外路徑可以是絕對也可以是相對
- print(gcf,'-dpng','abc.png') %儲存為png格式的圖片到當前路徑</font>
複製程式碼 注意:print函式必須緊跟在plot函式之後使用。