最近训练数据时,采用实验室的项目数据,需要做一些预处理。
发现一些常用的简单操作总是每次都要百度一下,好记性不如烂笔头,还是记录一下吧,避免以后再百度,以节省时间。。。。。
1、怎样批量获取文件夹中的文件名,并把文件名存在excel中的表格中?
推荐使用BAT批处理法。
比如,获取文件夹中的批量图像名字。
在该文件夹中新建一个txt,然后在里面输入下面一句code,没错,就是一句代码,就能轻松解决问题。
![1a1211231d7c09418efa02f8e9e626b3.png](https://i-blog.csdnimg.cn/blog_migrate/28df09b1676f9a26c1f21c57ce100572.png)
注意,代码中的每个字符之间有空格。
然后把该txt文件格式改为bat文件格式,即直接把txt后缀名修改为bat后缀名。
![ff0d9aa642ccd80409eac5c1a81e479e.png](https://i-blog.csdnimg.cn/blog_migrate/da62943c015b021f0b3ad1c7ec5d504c.png)
双击该bat文件,直接就在该批量文件夹下面就产生一个保存批量图像名的CSV格式文件。
![9bd99cee975b339d29fad652b8d2d7fe.png](https://i-blog.csdnimg.cn/blog_migrate/2d2d6c242f9da6a6816840eb88308741.png)
该CSV格式的文件打开如下:
![fb3790db6f0e10ece60a1e4dbfa7b9af.png](https://i-blog.csdnimg.cn/blog_migrate/bc1b45fb28526002836dd41e46c026df.png)
也可以把此bat文件放在其他文件夹里运行,获取当前文件夹下面的所有文件名。
更进一步操作:如何批量获取文件夹中的文件名称,而不要文件后缀名?
在excel中【ctrl+H】打开替换窗口,将后缀名.jpg全部替换为空。
![4edddcc53fde06bb98b80a9d286c9d10.png](https://i-blog.csdnimg.cn/blog_migrate/6c98274e320647c1128a70fb62d6a7ed.png)
![ecffef53024fc61cdf7cf6bbbfe944b7.png](https://i-blog.csdnimg.cn/blog_migrate/951f2e2ced92a22411fecf89a971142b.png)
这样就完成了去掉后缀名的批处理操作。
当然,解决以上问题也可以自己编程,程序实现。
参考:
只要三招,轻松将一个文件夹里所有的文件名提取出来,放到 Excel 表格里www.360doc.com![09714ffd7c3f1fbb0e7d78ced439519c.png](https://i-blog.csdnimg.cn/blog_migrate/8ad3bb60fb96ed11abf1fb28b2cd8b6c.jpeg)
2、怎样检查excel 中的两列有序的数据是否相同。
写入公式 =if(A1=B1,true,false)。此公式是判断A1数据是否与B1一致,,等于返回TRUE,否则返回FALSE。
![b7f961a1d62b5c2ce4375e5f20086d4e.png](https://i-blog.csdnimg.cn/blog_migrate/df0819437dfa5b8bf4782d591aca1bc4.png)
![998106e42aefad428c75e0201fb33615.png](https://i-blog.csdnimg.cn/blog_migrate/16fa951cc5e4ade474e37a7073950774.png)
【扩展】
怎样判断excel中的两列无序数据中的内容是否一样?也即:
如何在两个EXCEL表格中查找重复项?
将两列数据放在两个表中,S1和S2中。可以通过函数if( )和函数countif( ),在其中一个表中的空单元格中,输入公式=IF(COUNTIF('S2'!A:A,A1)=1,"重复","不重复")来实现。
这里,在S1工作表,单元格B1输入公式:输入公式=IF(COUNTIF('S2'!A:A,A1)=1,"重复","不重复")。
![1188426804096e6ea47ded8d1916986f.png](https://i-blog.csdnimg.cn/blog_migrate/9ecef2da74cda888937dc4087daafe93.png)
参考:
https://jingyan.baidu.com/article/f96699bbcf4fac894e3c1b1a.htmljingyan.baidu.com3、怎样批量更改文件夹中的文件名
【图像jpg格式批量转换为png格式技巧】
(1)、首先在你放图片的文件夹里新建一个记事本文件,取名为“图片批量转化”。要注意的一点就是,里面的图片要统一为一种格式。
(2)、如果想将jpg格式批量转化为png格式,那么就在刚才新建的记事本文档里输入“ren *.jpg *.png”。举一反三可知,如果是将png格式转化为jpg,那么就该这样写“ren *.png *.jpg”。这里要强调的一点就是,“ren”与“png”之后要加有一个空格。记事本文档保存后,将后缀名修改为“bat”。
(3)、最后一步就是双击“bat”后缀的这个文件,它会自动弹出一个窗口,不用管它,等几秒后自动消失,然后就发现所有的图片格式都变成我们想要的png格式了。
参考:
不用任何软件,批量转化图片格式-百度经验jingyan.baidu.com![6fc569ba418d7b6d4fbd2a9e6a907818.png](https://i-blog.csdnimg.cn/blog_migrate/6382237f6976b24f5425ae49cabe48d0.jpeg)
【文件名批量命名成数字,并且去除重命名后的括号】
比较麻烦,建议使用程序实现。
参考:
文件名怎样批量命名成数字,去除重命名后的括号-百度经验jingyan.baidu.com4、单通道图像转换为三通道的图像
以单通道的tif和三通道的jpg格式的图像为例,一般是将三个通道的数值赋为相同的。
实现核心代码如下:
imagePath = 'G:要处理的tif图像路径';
savePath='G:要保存处理之后的图像路径tif_jpg';
imageFiles = dir(imagePath); %%读取目录文件下的所有图片文件
numFiles = length(imageFiles);%%获取图片的数量
for i=3:numFiles %%matlab 并行 其实和for一个用法
j = i-2;
disp(j); %%disp() 函数直接将内容输出在Matlab命令窗口中
imageFile = strcat(imagePath,imageFiles(i).name); %%strcat()函数经常出现在批量处理的时候,
%%这个时候我们需要用到for循环,然后这个函数能够让变量和路径产生一些关系,这个时候我们就可以对其进行批量处理。
A = imread(imageFile); %%读入图片
A3(:,:,1)=A; %%修改图片尺寸
A3(:,:,2)=A;
A3(:,:,3)=A;
imwrite(A3,[savePath,num2str(abs(j)),'.jpg']); %%保存图片 。
end
5、批处理代码实现
matlab实现:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%批处理
InputPath='G:批处理图像路径';%路径 Path
FileName=dir(strcat(InputPath,'*.tif'));%横向连接字符串
%读入图片格式名字:Name
%%%%截取文件夹中的原图像
FileName_ori=struct2cell(FileName);%将结构体转换为cell,以方便读取cell中的数据
FileName_ori_Name=FileName_ori(1,:)';%读取文件中的文件名字
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
NumFile=length(FileName);
I=cell(1,NumFile);
% path_save=cell(1,NumFile);
for i=1:NumFile
cd('G:当前图像路径image');% 当前图像路径
tempFileName=FileName(i).name;%读入第一张图片
tempFileName_Name=tempFileName(1:end-4);%获取图片名字,不要后缀 .tif
ImPath=strcat(InputPath,tempFileName_Name);%路径+图像名
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%对图片进行处理
cd('G:批处理切片');%切换到当前程序路径
%%%批处理函数如下:
box_mark=dividem(InputPath,tempFileName_Name);%批量处理的核心操作
end
python实现:
将特定文件夹下的某些批量文件挑选(复制)到到另一个文件夹
#将XML 中的对应的test文件也拿出来
import os
import shutil
obj_path = "D:要处理的图像路径test"
filelist = os.listdir(obj_path)
path1 = "D:总的被挑选的数据集Annotations"
path2 = "D:存储路径obj_xml"#将test中的原批量图在Annotations中对应的xml文件挑选出来
for file in filelist:
filename_jpg = os.path.splitext(file)[0] + '.xml' #读取文件名#同理,也可以将对应的图片拿出来
path_jpg = os.path.join(path1, filename_jpg)
if(os.path.exists(path_jpg)):
despath = os.path.join(path2, filename_jpg)
shutil.copy(path_jpg, despath)
######未完待续,后续再有预处理技巧,再更新补充#######