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

  最后,這個代碼的作用是批量處理一個文件夾里的圖像(進行圖像分塊),可以將分塊結果保存到每一個相應文件中如下:

(三張原圖批量分塊)                                                分塊結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM