MATLAB批量处理

批量图片处理并保存

path = 'E:\data\images\';%图片路径
D = dir([path '*.tif']);
StrIn='E:\data\images';%输入图片文件夹路径
StrOut='E:\data\images_output';%输出图片文件夹路径
i=1;

for h= 1:length(D)
    img=imread([StrIn '\' num2str(h) '.tif']);

    %图片剪裁
    pic_1 = imcrop(img,[186 202 183 183]);

    imwrite(img,[StrOut '\' num2str((h-1)+i) '.tif']);
end

 一个文件夹下有多个子文件夹的批处理

path_images = 'E:\DR\Messidor_resize\images';%输入需要分割的图像的路径
path_masks = 'E:\DR\Messidor_resize\masks';%输入掩膜的路径

StrOut='E:\DR\06-Vessels\img_output';%输出图片文件夹路径

%这三个^(* ̄(oo) ̄)主文件夹下的子文件夹名称
datasetsNames = {...
    'DR0', ...
    'DR1', ...
    'DR2', ...
    'DR3', ...
};
%% 开始处理,使用了两个for循环
for i = 1 : length(datasetsNames)
    datasetsNames{i}%显示正在处理哪一个子文件夹
    
    % 获得图片路径
    imagesPath = strcat(path_images, filesep, datasetsNames{i}, filesep);
    masksPath = strcat(path_masks, filesep, datasetsNames{i}, filesep);

    % 获得图片存储路径
    resultsPathImages = strcat(StrOut, filesep, datasetsNames{i}, filesep);

    % 获得图片名称
    imgNames = dir(imagesPath);
    imgNames = {imgNames.name};
    imgNames(strcmp(imgNames, '..')) = [];
    imgNames(strcmp(imgNames, '.')) = [];
%% 具体处理步骤
    for h= 1:length(imgNames)

        img=imread([imagesPath imgNames{h}]);
        I = img(:,:,2);
        mask = imread([masksPath imgNames{h}]);

        % 图像处理

        %保存图像
        imwrite(segment,[resultsPathImages '\' imgNames{h}]);

        %保存数据
        MAT_seg=strcat('data', num2str(i),'_',num2str(h),'.mat');
        save(MAT_seg,'data') ; 
    end
end

批量更改图片名

pt = 'E:\data\images\';%图片路径
ext = '*.tif';%图片后缀
dis = dir([pt ext]);%dir是列出该路径下的文件名
nms = {dis.name};

for i = 1:1:length(nms)
    old_name = [pt nms{i}]; %获取每张图片名  
    new_name = strcat('DRIVE',num2str(i),'.tif'); %新图片名
    eval(['!rename' 32 old_name 32 new_name]);  %生成新名字
  
end

调整图片大小

 

if (size(I,2)>1440)
    factor = 1440/size(I,2);
    I = imresize(I, factor);
    imwrite(I, strcat(resultsPathImages, imgNames{j}));
end

读取图片的顺序问题

如果不指定,默认图片名的排序为'a1' 'a10' 'a2' 'a20' 'a3' 'a30' ,是ASCII编码的模式。

而文件夹中的排序是1、2、3...模式,需要对图像重新排序。

在matlab‘主页’的‘附加功能’中,搜索Natural-Order Filename Sort,下载并添加到搜索路径,根据提示对图片名进行排序就行了。

>> A = {'a2.txt', 'a10.txt', 'a1.txt'};
>> sort(A)
ans = 'a1.txt'  'a10.txt'  'a2.txt'
>> natsortfiles(A)
ans = 'a1.txt'  'a2.txt'  'a10.txt'

 

 


版权声明:本文为icecreamdinner原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。