本文共 1983 字,大约阅读时间需要 6 分钟。
最近的一个任务就是给图片打标签,纯体力活儿。
简单描述任务:给几个文件夹里的图片分类。
常规做法具体是:
1. 先打开一个图像,图像上可能包含A/B/C/D四个东西中的一个或者几个;
2. 判断这个图像上包含的是什么:A?AB?等;
3. 如果图像不包含所需东西中的任何一个,则丢弃;
4.否则将图像保存到对应文件夹,并将图像重命名;
这个活儿最恶心的就是要大量操作“读图”,“判断”,“另存”为这几个简单重复的动作。然而就是这样的特点使得我有机会来优化完成此任务的流程。
优化之后的流程:
1. 图像自动弹出;
2.我根据肉眼判断图像类别,在键盘上敲下图像标签(标签预设为123等数字,十分节省时间);
3.程序根据标签自动保存图像,并将图像重命名;
你看,写一个matlab函数可以让我只需要做一件事(如上面的粗体字所描述)。
我把整个程序分为3个部分,根据功能分为:
1. read()函数;
2.saveAs()函数;
3. main()函数;
filefolder_path = '';save_path = '';work_path = '';filefolders = dir(filefolder_path) %读出所有的文件夹的名字types = ['A';'B';'C';'D']%新建分类的文件夹for k=1:length(types) mkdir([save_path types])end%processfor i=1:length(filefolders) filefolder = filefolders(i).name; file_path = [filefolder_path '\' filefolder] files = dir(file_path); len = length(files); %如果是空文件夹,进行下一个循环 if len<1 continue end %对本文件夹中的图像打标签 for j=1:len %dir得到的东西包含了'.'和'..' if strcmp(files(j).name,'.') || strcmp(files(j).name,'..') continue end thisfile = [file_path '\' files(j).name]; read(thisfile); #预设标签 p = '1:A 5:B 6:C 9:D'; #a就是我们输入的数字 a = input(p); #dest_path是我们想要另存为的路径 dest_path=saveAs(a,types,save_path); p1 = '1:AP 2:LAT'; ti = input(p1); if ti == 1 new_name = 'AP'; elseif ti == 2 new_name = 'LAT'; end %复制图像到新的位置 copyfile(file_path,dest_path); %切到新位置来重命名 cd(dest_path); %设置重命名的命令command command = ['rename' 32 current_name 32 new_name]; status = dos(command); %重命名之后回到原来的工作路径; cd(work_path); endend
CSDN好像没有matlab代码格式啊。。。
另外:
1. 在matlab命令行窗口输入:format long可以让数字显示位数变为16.
2. input函数的使用:p= 'this will show on the screen'; a= input(p);
当你在键盘上输入个什么东西的适合,它就会被a拿到;
3. 注意要调用的函数所在路径,与程序中的工作路径的区别;
4. 审核任务的性质,灵活运用编程来简化工作。
更多学习资料,请关注下面的公众号:不定期分享
来自 <>
转载地址:http://syjrj.baihongyu.com/