matlab處理:批處理影象分塊
阿新 • • 發佈:2018-12-24
有一個影象分塊的程式碼,可以直接將一幅影象分為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
最後,這個程式碼的作用是批量處理一個資料夾裡的影象(進行影象分塊),可以將分塊結果儲存到每一個相應檔案中如下:
(三張原圖批量分塊) 分塊結果如下: