Matlab 同一文件夾下圖片批量處理的兩種簡單方法

Matlab 同一文件夾下圖片批量處理的兩種簡單方法

最近因爲實驗中有許多圖片需要處理,本來的做法是一張張讀取圖片,這是相當麻煩的,因爲每處理一張圖片就需要修改相應的圖片名。於是就想着要是可以批量處理就好了,這樣就可以大大提高效率。通過閱讀文章和自己親身的實踐,下面總結兩種方法,希望可以給其他人做參考,也方便自己以後使用。


1. 幾個函數的介紹

在這之前需要首先介紹幾個用到的函數:

1.1 strcat函數

這個函數就是字符串連接函數,舉個例子:

a='Good';
b='morning';
c=strcat(a,b)
運行結果:
c =

Goodmorning

1.2 dir函數

dir的功能就是列出指定文件夾下的文件,並將其放在一個結構體當中。有如下幾種用法:d
dir(‘.’)列出當前目錄下所有子文件夾和文件
dir(‘G:\實驗圖片’)列出指定目錄下所有子文件夾和文件
dir(‘*.m’)列出當前目錄下符合正則表達式的文件夾和文件

2. 兩種實現方法

介紹完上面的函數下面就介紹兩種實現的方法

2.1 方法一

直接看代碼:

file_path =  'G:\實驗圖片-2018-8-15\';% 圖像文件夾路徑
img_path_list = dir(strcat(file_path,'*.jpg'));%獲取該文件夾中所有.jpg格式的圖像
img_num = length(img_path_list);%獲取圖像總數
if img_num > 0 %有滿足條件的圖像
        for pn = 1:img_num %逐一讀取圖像
            image_name = img_path_list(pn).name;% 圖像名
            img_origin =  imread(strcat(file_path,image_name));%讀取圖像
            fprintf('%d %s\n',pn,strcat(file_path,image_name));% 顯示正在處理的圖像名
 %%此處添加具體的圖像處理程序
 end
    end

這種方法就是先將指定路徑下的“.jpg”圖片通過dir函數放到結構體當中,再逐一地對圖像進行讀取和處理。

fprintf('%d %s\n',pn,strcat(file_path,image_name));

這句代碼其實很有用的,可以實時打印消息,告訴你目前處理到哪個圖片了,也方便我們判斷程序有沒有問題。

2.2 方法二

還是先看代碼:

fig_path='G:\實驗圖片-2018-8-15\';
cd (fig_path); %切換到指定路徑下
allfigs=struct2cell(dir('*.jpg')); %只處理jpg文件
[w,img_num]=size(allfigs); %獲得jpg文件的個數
for pn=1:img_num         %逐次取出圖片
    image_name=allfigs{1,pn};  %allfigs{1,pn}存儲每個圖片的名字
    img_origin=imread(image_name); %讀取圖片
    fprintf('%d %s\n',pn,strcat(fig_path,image_name));
%%此處添加具體的圖像處理程序
 end

這種方法本質上和上面是相似的,差別主要在於這裏通過struct2cell函數,將.jpg文件列表轉換成了胞元數組形式,通過胞元數組處理每個圖片。

3. 含有子文件夾的情況

這種方法只是針對文件夾當中不含有子文件夾的情況,如果子文件夾當中也有圖片需要處理,那麼就需要修改了。但是本人由於處理過程不涉及這種情況,就沒有深究了。只是看到一篇文章中提供了一種辦法,但本人也沒有去驗證,在這裏就先貼出來。含有子文件夾的處理辦法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章