我正在编写一个简单的函数,它读取一系列图像,重新调整它们的大小,然后将每组重新调整大小的图像保存到一个新文件夹中。这是我的代码:
function [ image ] = FrameResize(Folder, ImgType)
Frames = dir([Folder '/' ImgType]);
NumFrames = size(Frames,1);
new_size = 2;
for i = 1 : NumFrames,
image = double(imread([Folder '/' Frames(i).name]));
for j = 2 : 10,
new_size = power(new_size, j);
% Creating a new folder called 'Low-Resolution' on the
% previous directory
mkdir ('.. Low-Resolution');
image = imresize(image, [new_size new_size]);
imwrite(image, 'Low-Resolution');
end
end
end
我主要有两个疑问:
im_1_64
,im_2_64
等?答案 0 :(得分:2)
由于您知道分辨率为:new_size x new_size
,因此您可以在imwrite
函数中使用此分辨率:
imwrite(image, ['im_' num2str(i) '_' num2str(new_size) '.' ImgType]);
假设ImgType
拥有扩展名。
要设置文件夹,您可以执行以下操作:
mkdir(num2str(new_size))
cd(num2str(new_size))
imwrite(image, ['im_' num2str(i) '_' num2str(new_size) '.' ImgType]);
cd ..
答案 1 :(得分:1)
你有一个满意的答案,但我强烈建议你做两件事:
使用fullfile
创建/连接文件和路径名。
例如,而不是:
imread([Folder '/' Frames(i).name])
DO
imread(fullfile(Folder,Frames(i).name))
它对相对路径也有好处:
fullfile('..','Low-Resolution')
ans =
..\Low-Resolution
使用sprintf
创建包含变量数值数据的字符串。而不是:
['im_' num2str(i) '_' num2str(new_size) '.' ImgType]
DO
sprintf('im_%d_%d.%s', i, new_size, ImgType)
您甚至可以指定每个整数所需的位数。比较:
K>> sprintf('im_%d_%d.%s', i, new_size, ImgType)
ans =
im_2_64.png
K>> sprintf('im_%02d_%d.%s', i, new_size, ImgType)
ans =
im_02_64.png