我正在尝试将特定文件夹中的所有.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');
我该如何解决这个问题?
答案 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