调整和保存新目录上的图像

时间:2014-11-03 13:49:38

标签: image matlab image-processing

我正在编写一个简单的函数,它读取一系列图像,重新调整它们的大小,然后将每组重新调整大小的图像保存到一个新文件夹中。这是我的代码:

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_64im_2_64等?
  • 如何使每个迭代的创建文件夹名称发生变化,以便在同一文件夹中保存具有相同分辨率的图像?

2 个答案:

答案 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