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