1. 程式人生 > >Matlab 中的movefile函式使用小記

Matlab 中的movefile函式使用小記

       因為最近使用labelImg軟體標註訓練圖片,如果圖片有目標區域就標註,沒有當然就不用就標註了,標註檔案儲存在當前圖片資料夾下,這樣當標註完一批圖片後你將看到,好多圖片和圖片對應的標註檔案(.xml格式),還有沒有標註的圖片:

       那麼問題來了:如何從這些檔案中取出標註的檔案圖片(標註檔案很好取,可以用.xml字尾名使用檔案過濾器來篩選)?手動選取?如果這有十幾張圖片還勉強可行,多了眼睛都花了,我要達到的目的是從這些檔案中取出標註的圖片,而我們知道只用標註過的圖片含有標註檔案,而他們的檔名是相同,這是有規律的,有規律的事最適合程式來幹了,基於這樣的情況,還是寫個小程式便捷,得了下面就用Matlab寫了個程式。

 Matlab中有個函式 movefile就是完成這個事情的主要函式,大致簡介一點:

算了我還是直接貼上help文件吧,簡介明瞭,只做個別註解。

movefile('source')
movefile('source','destination')#把source 移動destination
movefile('source','destination','f')#強行把source 移動destination,即使source只有只讀屬性
[status,message,messageid] = movefile(___)

好了現在就上完整程式碼:

%2018/09/05 by DQ
clc;
clear;
close all;
OriginalFolderName='temp';
AnotFolder='C:\Users\Administrator\Desktop\windows_v1.6.0\ImageSet\NewAppendIm';
%建立一個資料夾用於放置含有標註的圖片和標註檔案
ValidAnotName=strcat('Valid',OriginalFolderName);
ValidAnotFolder=fullfile(AnotFolder,ValidAnotName);
if ~exist(ValidAnotFolder,'dir')
    mkdir(ValidAnotFolder);
end
%選出含有標註的檔案和圖片
AnotFileSet=dir(strcat(AnotFolder,'\*.xml'));
AnotFileNum=length(AnotFileSet);
for i=1:AnotFileNum
    AnotFileName=AnotFileSet(i).name;
    AnotFilePath=fullfile(AnotFolder,AnotFileName);
    ImFileName=strcat(AnotFileName(1:end-4),'.jpg');
    ImFilePath=fullfile(AnotFolder,ImFileName);
    movefile(AnotFilePath,ValidAnotFolder);%標註檔案移動到指定的資料夾下
    movefile(ImFilePath,ValidAnotFolder);%標註圖片移動到指定的資料夾下
end

%建立一個資料夾用於放置未標註圖片
InvalidFolderName=strcat('Invalid',OriginalFolderName);
InvalidImFolder=fullfile(AnotFolder,InvalidFolderName);
if ~exist(InvalidImFolder,'dir')
    mkdir(InvalidImFolder);
end
InvalidImSet=dir(strcat(AnotFolder,'\*.jpg'));
ImFileNum=length(InvalidImSet);
for i=1:ImFileNum
    ImFileName=InvalidImSet(i).name;
    ImFilePath=fullfile(AnotFolder,ImFileName);
    movefile(ImFilePath,InvalidImFolder);
end

% %一種簡潔的操作
% InvalidFolderName=strcat('Invalid',OriginalFolderName);
% InvalidImFolder=fullfile(AnotFolder,InvalidFolderName);
% InvalidIms=strcat(AnotFolder,'\*.jpg');
% movefile(InvalidIms,InvalidImFolder,'f')%移動資料夾下所有含有.jpg字尾名的圖片,'f'表示如果放置的資料夾不存在自動建立一個

至此就完成了把標註圖片及標註檔案從雜亂的檔案中取出來了