处理数据集的python代码
2022/1/16 22:04:08
本文主要是介绍处理数据集的python代码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 缩放一个文件夹中的所有图片
- 使用一个阈值将文件夹中的标签图变为二值图
- 给标签图重命名
- 给原图与标签图都重命名
缩放一个文件夹中的所有图片
import numpy as np import glob import os from PIL import Image #image_path表示图片所在文件夹的路径 #new_image_path 表示存新图片的文件夹路径 #new_size 表示长度为2的列表,两元素分别是宽和高 def img_resize(image_path,new_image_path,new_size): # 找出image_path下的所有.jpg/png/jpeg图片路径,并排序 imgs = sorted(glob.glob(image_path + "*.jpg") ) print(len(imgs)) for img in imgs: image = Image.open(img) image=image.resize(new_size,Image.BILINEAR) print(image.size) # os.path.splitext() 将文件名和扩展名分开 # os.path.split() 返回文件的路径和文件名 img_name=os.path.split(img)[1] print(img_name) image.save(new_image_path+img_name) #保存图片
使用一个阈值将文件夹中的标签图变为二值图
import numpy as np import glob import os from PIL import Image #该函数用于把只有一个类别的标签图变为二值图(因为用ps弄出的不是二值图,边缘部分会有灰度值过渡的情况,除非用labelme制作标签图) #max_value表示二值图的大的那个值,默认为1 , samll_value表示二值图的小的那个值,默认为0 #new_size表示是否缩放图片,默认为False,若要缩放图片就传一个长度为2的列表(宽和高) def annotation_prepare(ann_path,new_ann_path,threshold,new_size=False,max_value=1,samll_value=0): #用来将标图变为1或255的二值图 anns = sorted(glob.glob(ann_path + "*.jpg")) for ann in anns: ann_name = os.path.split(ann)[1] #得到带扩展名的图片名字用于后面的图片命名 print(ann_name) ann = Image.open(ann) ann = ann.convert("L") #变为灰度图 if (new_size!=False): #new_size!=False表示需要缩放图片, w, h = new_size ann=ann.resize((w,h),Image.BILINEAR) else: w,h=ann.size ann=np.array(ann) #进行阈值转化 new_ann=(ann>threshold)*max_value new_ann=new_ann+(ann>=threshold)*samll_value new_ann = new_ann.astype(np.uint8) # 再还原成uint8格式,图片需要以这种格式来保存 new_ann = Image.fromarray(new_ann) # 从数组形式转为图片形式,这样可以使用save函数 new_ann.save(new_ann_path+ann_name) #保存图片
给标签图重命名
#用于标签图比原图名字(不算扩展名)的基础上多了一些后缀的情况,且一张原图对应1或多张标签图。可将标签图的多余的一些后缀去掉,用统一的_0N代替(如原图名为10.jpg 而其对应的标签图为10_water_1,10_w_2 , 可将标签图重命名为10_01,10_02)。 #把多余的原图也也去掉,因为数据集比较乱的话,有的原图可能对应0张标签图 #img_path 原图所在文件夹的路径 #ann_path 标签图所在文件夹的路径 def annNameChange(img_path,ann_path,new_img_path,new_ann_path): #用来将标图变为1或255的二值图new_ann_path, imgs = sorted(glob.glob(img_path+"*.jpg")) for img in imgs: img_save=Image.open(img) #读取img图片用于待会转移路径保存 img = os.path.split(img)[1] #得到带后缀的图片名字 img_name=os.path.splitext(img)[0] #去掉扩展名 print(img_name) ann_list=glob.glob(ann_path+img_name+"[_.]*") #找出这张图片对应的所有标签图。 [ ] 表示匹配[]中的任意字符 。 这里需要根据自己图片的名字特征重改匹配规则 print(len(ann_list)) i=1 for ann in ann_list: ann = Image.open(ann) #读取图片是为了下面的重新保存 new_img_name=new_img_path+'/'+img_name+'.jpg' new_ann_name=new_ann_path+'/'+img_name+"_0{}.jpg".format(i) #这也是重点。 print(new_ann_name) i =i+1 img_save.save(new_img_name) #重新保存图片 ann.save(new_ann_name)
给原图与标签图都重命名
#和上面类似,但是这里是把原图与标签图全部重新命名,从1开始,第n张原图命名为n.jpg,而其对应的标签图命名为n_0x.jpg def annNameChange_new(img_path,ann_path,new_img_path,new_ann_path): #用来将标图变为1或255的二值图new_ann_path, imgs = sorted(glob.glob(img_path+"*.jpg")) i_name=0 #表示正处理第i_name张图,命名是也以i_name命名 for img in imgs: i_name = i_name+1 img_save=Image.open(img) #读取img图片用于待会转移路径保存 img = os.path.split(img)[1] #得到带后缀的图片名字 img_name=os.path.splitext(img)[0] #去掉扩展名 print(img_name) ann_list=glob.glob(ann_path+img_name+"[_.]*") #找出这张图片对应的所有标签图。 [ ] 表示匹配[]中的任意字符 print(len(ann_list)) i=1 for ann in ann_list: ann = Image.open(ann) #读取图片是为了下面的重新保存 new_img_name=new_img_path+'/{}.jpg'.format(i_name) new_ann_name=new_ann_path+'/{}_0{}.jpg'.format(i_name,i) #这也是重点。 print(new_img_path) print(new_ann_name) i =i+1 img_save.save(new_img_name) #重新保存图片 ann.save(new_ann_name)
这篇关于处理数据集的python代码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python