Matlab图片读入和导出

Matlab图片读入和导出

文件读入

面对大量的实验文件,一次性读取多个文件运行程序显然比挨个运行省心的多。Matlab读取的文件常见的有 .txt

类型、.bmp、.jpg等图像类型,Matlab连续读取多个文件的格式大体上是一致的,只是有些许的不同。

一、多个.txt 文件连续读取(2 ways)

  • 方法1:把文件的文件名按一定的规律命名

例如:filename1.txt,filename2.txt,…,fielname100.txt,在读取的时候使用循环:

1
2
3
4
for i = 1:100
fileName = ['filename' num2str(i) '.txt'];
x = load(filiName);
end
  • 方法2:统一放在一个文件夹下

不需要统一进行重命名了:

1
A = dir(fullfile('d\datafile','*.txt'));

这个语句是把存放数据文件的目录d:/datafile下的所有txt文件列出来,并把这些文件名的信息存放到一个变量A中,A是一个结构体变量,只要对A进行循环就可以读取到所有文件的数据了。

二、图像文件连续读取(3 ways)

以 .bmp 格式为例

  • 方法1:把文件的文件名按一定的规律命名

例如:filename1.bmp,filename2.bmp,…,fielname100.bmp,在读取的时候使用循环:

1
2
3
4
for i = 1:100
fileName = ['filename' num2str(i) '.bmp'];
x = imread(filiName);
end
  • 方法2:将图像统一放在一个文件夹下

不需要统一进行重命名了,利用uigetdir函数得到你所处理图像的路径,然后对此路径下的所有图像进行处理,举例如下:处理bmp文件

如果确定文件夹目录,

1
2
3
4
5
A = dir(fullfile('d\picfile','*.bmp'));
for i=1:length(A)
name=A(i,1).name;
I=imread(name);
end

这个语句是把存放图像文件的目录d:/picfile下的所有.bmp文件列出来,并把这些文件名的信息存放到一个变量A中,A是一个结构体变量,只要对A进行循环就可以读取到所有的图片了。

  • 方法3:如果未指定文件夹目录
1
2
3
4
5
6
7
8
9
10
srcDir=uigetdir('Choose source
directory.'); %获得选择的文件夹
cd(srcDir);
allnames=struct2cell(dir('*.bmp')); %只处理8位的bmp文件
[k,len]=size(allnames); %获得bmp文件的个数
for i=1:len
%逐次取出文件
name=allnames{1,i};
I=imread(name); %读取文件
end

文件导出

保存图片

保存整个图窗

saveasprint函数保存的图像都带白边,不是仅保存图像 带白边

以时间命名文件的方法

1
2
3
4
5
6
7
% 设置文件名
formatOut = 'yyyy-mm-dd-HH-MM-SS-FFF';
fileName = [datestr(now,formatOut) 'EX.png'];
% datestr(datetime("now")) % 也可以获取现在时间"now"并转成字符串格式
% 保存图像,带白边
saveas(gcf, fileName)
print(gcf, '-dpng', fileName)

保存图片

1
2
3
4
5
6
7
8
% 转换成imwrite函数支持的格式
frame = getframe(gca); % 获取frame
img = frame2im(frame); % 将frame变换成imwrite函数可以识别的格式
% 自定义图片名称
formatOut = 'yyyy-mm-dd-HH-MM-SS-FFF';
fileName = [datestr(now,formatOut) 'EX.png'];
% 导出图片
imwrite(img, fileName);

gca得到的就是figure的返回值,应该是吧!

导出到指定文件夹

imwrite 的定义是:在当前文件夹中创建新文件。

**方案一:**失败

那么可以先设置指定文件夹作为当前文件夹,然后再执行imwirte函数

执行完了在将当前文件夹恢复到工作文件夹

cd('e:\...')

切换了当前文件夹,当前文件就无法继续执行了

方法二:

在MATLAB下将处理得到的图片保存到某个指定文件夹

命令:

1
2
3
imwrite(pic(需要保存的图片名称),strcat(‘文件路径’),‘jpg’)
例如:
imwrite(I,strcat(‘C:\Users\Administrator\Desktop\bishe\pic\1.jpg’),‘jpg’);

此处,我想要保存的图片变量是“I”,保存得到的图片名称是1.jpg。

成功版本

1
2
3
4
5
6
7
8
9
10
function [] = writeOutImage(picProcessed)
% writeOutImage(picProcessed)批量导出图片
% 依次读取矩阵picProcessed(1×9)中的元素,用imwrite保存到指定文件夹
formatOut = 'yyyy-mm-dd-HH-MM-SS-FFF';
n = numel(picProcessed);
for i = 1:n
fileName = ['E:\HOLDER\matlab\projects\yehePS\ProcessedPic_Base\' datestr(now,formatOut) 'pic_' num2str(i) '.png'];
imwrite(picProcessed{i}, fileName);
end
end