MATLAB中的读入和存储文件方式

一、读取图像

图像的读取

I=imread('test.tif');

imread是读取图像的函数。test.tif是matlab内置的图像,不管在什么程序内都可以直接读取。那么,如果我们要读取其他位置的函数怎么做呢?这里我们来说几种常见的情形。

注:Matlab文件夹内有test.m,1.jpg,image文件夹,同时image文件夹内有2.jpg

(1)读取1.jpg

I=imread('1.jpg');

(2)读取2.jpg

I=imread('image\2.jpg');%相对路径的读取

(3)读取D:\test\image\1.jpg

I=imread('D:\test\image\1.jpg');%绝对路径的读取

(4)读取D:\test\image内20个图像。读取批量图片

for i=1:20

I=imread(['D:\test\image\',num2str(i),'.jpg']);

end

注:第四种情况需要注意的是,里面添加了[ ],来保证这是一个整句。num2str(i)是将i由数字转换成字符形式。这样就能实现循环读取。一般来说,会将图像跟.m文件放在一起。当图像较多时,图像放入image文档中,读取方式将(2)和(4)结合起来。利用相对路径来读取,这样当程序和图像同时放在其他电脑上时,不会因为路径而产生问题。

二、图像的显示

imshow(I)

imtool(I)

image(I)

主要的意思是:imshow显示按照原来的比例,而image会改变原来图像的比例。imtool,很少用到。那么用到的时候就再研究吧。一般用imshow就足够了。

那么什么时候用figure呢?当程序中只显示一幅图像时,直接imshow就可以。然后当图像多的时候,就需要用到figuure;imshow(I1);figure;imshow(I2);figure;imshow(I3)

如果想要在一张图片内,显示好几个图怎么办呢?title显示在图像的上方,起到提示的作用。

I=imread('test.tif');

subplot(221);imshow(I);title('1');

subplot(222);imshow(I);title('2');

subplot(223);imshow(I);title('3');

subplot(224);imshow(I);title('4');

其中前面的22代表是2*2的分布,也可以是2*3,3*4等。按照行来排列,从第一行开始分别为1 2 3 4。
这里还值得一提的是figure;如果没有要求的话,直接用figure。此时希望图2来显示某个图像,那么figure(2),就指定来显示某个图像。当然了,如果仅有一个图像显示这样做,那么可能会被覆盖掉,因此,一个程序中的用法一定要统一,并且保证后面的,不要把前面的覆盖掉。

图像的存储

imwrite(I,'test.jpg');

同样,imwrite也有相对路径和绝对路径的存储,以及连续的存储方法。同imread

imwrite(I,'pout1.jpg');

imwrite(I,'image\pout1.jpg');

imwrite(I,'D:\Matlab\image\pout1.jpg');

imwrite(I,['image\',num2str(i),'.jpg']);%i是变量,需要定义

这里的.jpg可以改成.bmp等,想要的格式。
需要注明的是,存储所选择的文件夹,需要已经建立好。那么怎么去自动建立文件夹呢?
需要用mkdir函数。

mkdir(‘D:\image\1’)%绝对路径的建立。
mkdir(‘image\1’);%绝对路径文件夹的建立。创建之后,在Matlab文件夹内,跟程序在一个根目录下。

其他形式的保存方式

1、imwrite用于保存GIF图
clear
clc
n = 1:10;
nImages = length(n);
x = 0:0.01:1;
im = cell{nImages, 1};
figure;
for idx = 1:nImages
    y = sin(2*pi*x*idx);
    plot(x,y,'LineWidth',3)
    title(['y = sin(2n\pix),  n = ' num2str(n(idx)) ])
    drawnow
    frame = getframe(gcf);
    im{idx} = frame.cdata;
end
close;
filename = 'test.gif';
for idx = 1:nImages
    [A,map] = rgb2ind(im{idx},256);
    if idx == 1
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
    end
end
2、使用saveas函数

该函数实际上类似于 “另存为” 的选项, 并且忽略图片的背景大小等等, 按照默认的属性存储.

一般格式为为

saveas(fig, filename, formattype)
clear
clc
x = 0:0.01:2*pi;
y = sin(x);
plot(x, y)
xlabel('x')
ylabel('y')
title('y = Sin(x)')
saveas(gcf, 'test', 'png')
eg:  saveas(gcf, 'test\Image\rod3BW', 'png')
3、使用 printf 函数
clear
clc
x = 0:0.01:2*pi;
y = sin(x);
plot(x, y)
xlabel('x')
ylabel('y')
title('y = Sin(x)')
printf(gcf,'-dpng','test.png') 

注意

在使用imwrite(I,'D:\Matlab\image\pout1.jpg'); 保存经过处理以后的图像时,会发现保存的结果是空白的,并不是我们想要的处理以后的图像,原因如下:
imwrite(A,filemane)中如果图像A两种可能
1)A数据是整型取值为【0-255】;
2)double类型,取值范围为【0-1.0】
保存显示图像为空白,说明A为本应该为整型,但是实际确实double类型,取值超过规定的1.0,显示为白色
uint8()其实是将double转换为【0-255】的整型数据,uint8(无符号整数,最大八位)
或者你可以将A = A/255,将A缩放到【0-1.0】区间内,然后imwrite(A,filemane),效果一样

猜你喜欢

转载自blog.csdn.net/m0_37592397/article/details/80503108