matlab处理:批处理图像分块

有一个图像分块的代码,可以直接将一幅图像分为5*5的小块,代码如下:

%[FileName,PathName] = uigetfile('*.*','Select the image');  
Im=imread('Bicubic flowers.bmp');
imshow(Im)
hold on
L = size(Im);
height=5;
width=5;
max_row = floor(L(1)/height);%实验图片为800*1280,则max_row=5,max_col=8
max_col = floor(L(2)/width);
seg = cell(max_row,max_col);
%分块
for row = 1:max_row      
    for col = 1:max_col        
    seg(row,col)= {Im((row-1)*height+1:row*height,(col-1)*width+1:col*width,:)};   
    end
end 
for i=1:max_row*max_col
imwrite(seg{i},strcat('m',int2str(i),'.bmp'));   %把第i帧的图片写为'mi.bmp'保存
end
%画出分块的边界
for row = 1:max_row      
    for col = 1:max_col  
 rectangle('Position',[160*(col-1),160*(row-1),160,160],...
         'LineWidth',2,'LineStyle','-','EdgeColor','r');
        end
end 
hold off

  怎么直接把一个文件夹里的所有图片都按这个分块方法进行分类并保存结果呢?开始我想的是直接用一个循环结构就可以了,但是后来发现最后的结果不对,好几张图片分类最后的小图片数量不够,试了几次才发现是命名相同的问题,循环里最后保存的每个大图的小图片的名字是一样的,所以后面的把前面产生的小图像给覆盖掉了,然后就想办法,每个循环都建立一个文件夹,来分开保存每个大图的小图片,这样问题就解决了。代码如下:

srcDir=uigetdir('Choose source directory.'); %获得选择的文件夹
cd(srcDir);
%mkdir('.\image')
allnames=struct2cell(dir('*.bmp')); %只处理8位的bmp文件
[k,len]=size(allnames); %获得bmp文件的个数
for ii=1:len
%逐次取出文件
mkdir(['.\image\',int2str(ii)]);
name=allnames{1,ii};
Im=imread(name); %读取文件
%然后在此处添加你的图像处理程序即可
L = size(Im);
height=5;
width=5;
max_row = floor(L(1)/height);%实验图片为800*1280,则max_row=5,max_col=8
max_col = floor(L(2)/width);
seg = cell(max_row,max_col);
%分块
for row = 1:max_row      
    for col = 1:max_col        
    seg(row,col)= {Im((row-1)*height+1:row*height,(col-1)*width+1:col*width,:)};   
    end
end 
for i=1:max_row*max_col
imwrite(seg{i},strcat('image\',int2str(ii),'\','m',int2str(i),'.bmp'));   %把第i帧的图片写为'mi.bmp'保存
end
%画出分块的边界
for row = 1:max_row      
    for col = 1:max_col  
 rectangle('Position',[160*(col-1),160*(row-1),160,160],...
         'LineWidth',2,'LineStyle','-','EdgeColor','r');
        end
end 
end

  最后,这个代码的作用是批量处理一个文件夹里的图像(进行图像分块),可以将分块结果保存到每一个相应文件中如下:

(三张原图批量分块)                                                分块结果如下:

猜你喜欢

转载自www.cnblogs.com/libai123456/p/10171548.html