使用MATLAB将某个文件夹中的所有图像从.tif转换为.jpg



我正在尝试将某个文件夹中的所有.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');

我该如何解决此问题?

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

编写健壮代码时的一些附加建议:

  • 使用fullfile(Folder,ImgType)代替[Folder '/' ImgType]。它更健壮(避免了重复的文件分隔符)并且独立于操作系统
  • 使用im2double而不是double来转换图像。这会自动扩展到0…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

这是我的答案,您可以将其作为函数在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

最新更新