2014-11-03 114 views
1

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

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等根据迭代和分辨率?
  • 如何使每次迭代时创建的文件夹名称更改,以便将同一分辨率的图像保存在同一文件夹中?
+0

你如何检测分辨率? – Divakar 2014-11-03 14:08:05

+0

或者,您如何定义“低分辨率”? – Divakar 2014-11-03 14:32:47

回答

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 .. 
+0

不错的文件夹设置。 – Rashid 2014-11-03 15:21:08

+0

谢谢,它帮助了很多。剩下的唯一问题是我收到一条消息:'num2str的语法无效。可能是a),}或]缺少'mkdir('低分辨率图像_'num2str(new_size)),但我找不到缺少的东西 – user3368101 2014-11-03 16:15:26

+0

如果你想连接字符串,你必须使用'strcat ('Low-Resolution Images_',num2str(new_size))或'['Low-Resolution Images_'num2str(new_size)]' – 0xMB 2014-11-03 16:19:21

1

你有一个答案你满意,但我强烈建议做两分不同的事情:

  • 使用fullfile到创建/连接文件和路径名称。

    ,而不是例如:

    imread([Folder '/' Frames(i).name]) 
    

    imread(fullfile(Folder,Frames(i).name)) 
    

    这是很好的相对路径也:

    fullfile('..','Low-Resolution') 
    ans = 
    ..\Low-Resolution 
    
  • 使用sprintf创建自变量包含数字数据串。相反的:

    ['im_' num2str(i) '_' num2str(new_size) '.' ImgType] 
    

    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