Matlab批量预处理图片(1)
来源:互联网 发布:分析软件测试的复杂性 编辑:程序博客网 时间:2024/06/07 05:28
本Matlab批量预处理图片程序包括:
1、批量对图片重命名;
2、将多个文件夹下面的图片,拷贝到一个文件夹下;
3、给定图片及其中人脸位置,框出人脸
- <span style="font-size:24px;">%功能描述:批量对图片重命名
- %路径格式为,E:\image\(maindir路径下要是子文件夹,不可直接是图片)
-
- clc;
- clear;
-
- maindir='H:\基于CNN的图像分类\绘画图像\敦煌\00000001\';
- name_long=5; %图片名字的长度,如000123.jpg为6,最多9位,可修改
- num_begin=2000; %图像命名开始的数字如000123.jpg开始的话就是123
-
- subdir = dir(maindir); %dir:列出指定目录下所有子文件夹和文件,不包含下级目录
- n=1;
-
- for i = 1:length(subdir)
- if ~strcmp(subdir(i).name ,'.') && ~strcmp(subdir(i).name,'..') %strcmp:比较字符串str1与str2,若完全相等则返回1,不相等返回0
- subsubdir = dir(strcat(maindir,subdir(i).name)); %strcat:将字符串str1与str2连接,dir
- for j=1:length(subsubdir)
- if ~strcmp(subsubdir(j).name ,'.') && ~strcmp(subsubdir(j).name,'..')
- img=imread([maindir,subdir(i).name,'\',subsubdir(j).name]); %读取图片
- imshow(img);
- str=num2str(num_begin,'%09d'); %将数值转化为字符串
- newname=strcat(str,'.jpg');
- newname=newname(end-(name_long+3):end); %取newname从第end-(name_long+3)个,到最后一个
- system(['rename ' [maindir,subdir(i).name,'\',subsubdir(j).name] ' ' newname]); %system('rename filename newfilename'); 这是调用格式
- num_begin=num_begin+1;
- fprintf('当前处理文件夹%s',subdir(i).name);
- fprintf('已经处理%d张图片\n',n);
- n=n+1;
- pause(0.1);%可以将暂停去掉
- end
- end
- end
- end </span>
- <span style="font-size:24px;">%功能描述:将多个文件夹下面的图片,拷贝到一个文件夹下。
- %train.txt文件包含多个子文件图片的相对地址,如:0--Parade\0_Parade_marchingband_1_849.jpg
-
- clc;
- clear;
- %注意修改下面四个变量
- imgpath='WIDER_train\images\';%图像存放文件夹
- txtpath='WIDER_train\train.txt';%txt文件
- b=0;
- fidin=fopen(txtpath,'r'); %以只读方式打开文件txtpath
- lastname='begin';
-
- while ~feof(fidin) %文件指针到达文件末尾时 该表达式值为“假”;否则为“真”
- tline=fgetl(fidin); %fget1:从文件中读取一行数据
- str = regexp(tline, ' ','split'); %分割,str:待分割的字符串,' ':分隔符的字符,S:分割结果
- filepath=[imgpath,str{1}]; %filepath:拼接的文件名
- a=0;
-
- if strcmp(str{1},lastname)%如果文件名相等,只需增加object
- a=a+1;
- else %如果文件名不等,则需要新建xml
- copyfile(filepath, 'WIDER_train_img'); %拷贝文件到JPEGImages_val文件夹中
- b=b+1;
- end
- lastname=str{1}; %将文件名赋值给lastname
- fprintf('已处理%d\n',b);
- end
- fclose(fidin); %关闭文件
- </span>
- <span style="font-size:24px;">%功能描述:给定图片及其中人脸位置,框出人脸
- %train.txt:0--Parade\0_Parade_Parade_0_904.jpg 360.918 97.9235 262.995 338.536
-
- clc;
- clear;
- imgpath='WIDER_train\images\';%图像存放文件夹
- txtpath='WIDER_train\train.txt';%txt文件
- fidin=fopen(txtpath,'r');
-
- while ~feof(fidin) %文件指针到达文件末尾时 该表达式值为“假”;否则为“真”
- tline=fgetl(fidin); %fget1:从文件中读取一行数据
- str = regexp(tline, ' ','split'); %分割,str:待分割的字符串,' ':分隔符的字符,S:分割结果
- filepath=[imgpath,str{1}]; %filepath:拼接的文件名
- img=imread(filepath); %读取图片
- imshow(img);
- %rectangle('Position',[x,y,w,h]),LineWidth:线条粗细4,EdgeColor:边框颜色是红色
- rectangle('Position',[str2double(str{2}),str2double(str{3}),str2double(str{4}),str2double(str{5})],'LineWidth',4,'EdgeColor','r');
- pause(0.1); %pause(n):程序暂停n秒后继续
- end
- fclose(fidin);</span>
0 0