Matlab 中的movefile函数使用小记

       因为最近使用labelImg软件标注训练图片,如果图片有目标区域就标注,没有当然就不用就标注了,标注文件保存在当前图片文件夹下,这样当标注完一批图片后你将看到,好多图片和图片对应的标注文件(.xml格式),还有没有标注的图片:

Matlab 中的movefile函数使用小记

       那么问题来了:如何从这些文件中取出标注的文件图片(标注文件很好取,可以用.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

至此就完成了把标注图片及标注文件从杂乱的文件中取出来了