使用MATLAB将特定文件夹中的所有图像从.tiff转换为.jpg

时间:2015-02-22 17:01:35

标签: matlab

我正在尝试将特定文件夹中的所有.tiff - 文件转换为.jpg。 我尝试过执行

ReadImgs('home/luisa/misc','*.tiff');

使用以下功能:

function X = ReadImgs(Folder,ImgType)
Imgs = dir([Folder '/' ImgType]);
NumImgs = size(Imgs,1);
image = double(imread([Folder '/' Imgs(1).name]));
for i=1:NumImgs,
    [pathstr,name,ext] = fileparts(Imgs(i).name);
    concatena=strcat(name,'.jpg');
    imwrite(y,concatena);
end
end

但是我收到了这个错误:

>> codigoPruebas
Index exceeds matrix dimensions.

Error in ReadImgs (line 4)
image = double(imread([Folder '/' Imgs(1).name]));

Error in codigoPruebas (line 7)
ReadImgs('home/luisa/misc','*.tiff');

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

检查dir的输出,它确实返回一个空结构。这是因为您传递了无效路径。它的/home/luisa/misc不是home/luisa/misc。绝对路径以/相对路径不开始。

编写健壮代码时的一些额外建议:

  • 而不是[Folder '/' ImgType]使用fullfile(Folder,ImgType)。它更健壮(避免重复文件分隔符)和os独立。
  • 使用im2double代替double转换图片。这会自动扩展为0 ... 1

答案 1 :(得分:1)

您的解决方案存在多种问题:

  • 您收到的错误是因为您尝试访问Imgs(1),即使它是空的。这是因为您提供了错误的文件路径:home/luisa/misc而不是/home/luisa/misc
  • 您只读取第一张图片,因为image = double(imread([Folder '/' Imgs(1).name]));不在for - 圈内。 (仅访问Imgs(1)而不是Imgs(i)
  • imwrite(y,concatena);应使用image代替y,因为永远不会定义y

实施这些更改将导致:

function convertAllToJpg(Folder,ImgType)
Imgs = dir(fullfile(Folder,ImgType));
for i=1:numel(Imgs)
    oldFilename = fullfile(Folder, Imgs(i).name);
    [~,name,~] = fileparts(Imgs(i).name);
    newFilename = fullfile(Folder, strcat(name, '.jpg'));
    imwrite(imread(oldFilename), newFilename);
end
end

答案 2 :(得分:0)

这是我的答案,你可以在你的Matlab中使用它作为一个函数 假设oldFolder存储您的原始图像类型         newFolder存储您的更改图像类型         ImgType是您的原始图像类型 并且你可以随心所欲地改变jpg。

    function convertAllToJpg(oldFolder,newFolder,ImgType)
    Imgs = dir(fullfile(oldFolder,ImgType));
    for i=1:numel(Imgs)
      oldFilename = fullfile(oldFolder, Imgs(i).name);
      [~,name,~] = fileparts(Imgs(i).name);
      newFilename = fullfile(newFolder, strcat(name, '.jpg'));
      imwrite(imread(oldFilename), newFilename);
    end
    end