花了几小时拼拼凑凑造的小车。。。。
因为一个组里的同学提供的图片已经是编号过的,顺势做下去
最前面为类别,所以我根据“-”符号获取“-”前面类别,创建对应文件夹,把他们都放进去。最终效果
名为1的文件夹中的内容
分类成功,如果再次运行,因为图片重复,给他继续延续序号
def seplabel(fname):
# .前面的字符
filestr = fname.split(".")[0]
# -前面的字符
label = int(filestr.split("-")[0])
return label
# 把图片中的类别总个数找出来,即要创建多少个文件夹
def labelnum(fname): # C:/Users/sinyjam/Desktop/xingzuotu/*.jpg
# 图片数记录
num = len(imglist)
labelnumber = []
maxlabel = 0
for i in range(0, num):
imglist2 = os.path.basename(imglist[i]) # 获取路径下图片名称
a = seplabel(imglist2)
labelnumber.append(a)
set(labelnumber)
# set去除多余元素,最后数量为[1,2,3,4,5]
num = len(set(labelnumber))
return num
# 把图片中的类别保存下来
def labellist(fname): # C:/Users/sinyjam/Desktop/xingzuotu/*.jpg
# 图片数记录
num = len(imglist)
labelnumber = []
labelnumberlist = []
maxlabel = 0
for i in range(0, num):
imglist2 = os.path.basename(imglist[i]) # 获取路径下图片名称
a = seplabel(imglist2)
labelnumber.append(a)
set(labelnumber)
# set去除多余元素,最后数量为举例:[1,2,3,4,5] 5个
labelnumberlist = set(labelnumber)
return labelnumberlist
# 创建文件夹
def createfilefloder(fname):
path = 'C:/Users/sinyjam/Desktop/xingzuotu2/' # 设置创建后文件夹存放的位置
for i in labellist(fname): # 这里创建类别个数个文件夹
# *定义一个变量判断文件是否存在,path指代路径,str(i)指代文件夹的名字*
isExists = os.path.exists(path + str(i))
if not isExists: # 判断如果文件不存在,则创建
os.makedirs(path + str(i))
print("%s 目录创建成功" % i)
else:
print("%s 目录已经存在" % i)
continue # 如果文件不存在,则继续上述操作,直到循环结束
# 读取文件并且复制文件到相应的文件夹,
# 这里的fname2不能是全路径到jpg,最后是文件夹/结尾
def readImgAndSave(fname2):
ls = os.listdir(fname2)
for i in ls:
print(i)
istr = i.split(".")[0]
label = istr.split("-")[0]
dst = os.path.join(destination_path, label)
new_image = os.path.join(dst, i)
# print(istr)
# print(label)
if not os.path.exists(new_image):
shutil.copy(fname2 + '/' + i, destination_path + '%s' % label + '/')
else:
images = os.listdir(dst)
max_serial = -1
for im in images:
_, serial_num = im.split('-')[0], im.split('-')[1]
theNum = re.compile('0*([1-9][0-9]*)').findall(serial_num)[0]
max_serial = max(max_serial, int(theNum))
max_serial += 1
new_name = label + '-' + str(max_serial).zfill(4) + '.jpg'
new_file_path = os.path.join(dst, new_name)
shutil.copy(fname2 + '/' + i, new_file_path)
因为神经网络训练的要求,提前做好RGB转换
# 转RGB
def ChangeToRgb(fname):
for infile in glob.glob(picturepath):
# file为前面的所有路径,ext为.jpg,拼在一起是一个完整的路径
file, ext = os.path.splitext(infile)
Img = Image.open(infile)
# 看图片类型。是不是我们要的RGB,不是就转换成RGB
print(Img.mode, file)
if Img.mode != 'RGB':
Img = Img.convert('RGB')
from PIL import Image
import numpy as np
import pickle, glob
import os # 导入创建文件夹模块
import shutil
import re
# 拆分标签
def seplabel(fname):
# .前面的字符
filestr = fname.split(".")[0]
# -前面的字符
label = int(filestr.split("-")[0])
return label
# 把图片中的类别总个数找出来,即要创建多少个文件夹
def labelnum(fname): # C:/Users/sinyjam/Desktop/xingzuotu/*.jpg
# 图片数记录
num = len(imglist)
labelnumber = []
maxlabel = 0
for i in range(0, num):
imglist2 = os.path.basename(imglist[i]) # 获取路径下图片名称
a = seplabel(imglist2)
labelnumber.append(a)
set(labelnumber)
# set去除多余元素,最后数量为[1,2,3,4,5]
num = len(set(labelnumber))
return num
# 把图片中的类别保存下来
def labellist(fname): # C:/Users/sinyjam/Desktop/xingzuotu/*.jpg
# 图片数记录
num = len(imglist)
labelnumber = []
labelnumberlist = []
maxlabel = 0
for i in range(0, num):
imglist2 = os.path.basename(imglist[i]) # 获取路径下图片名称
a = seplabel(imglist2)
labelnumber.append(a)
set(labelnumber)
# set去除多余元素,最后数量为举例:[1,2,3,4,5] 5个
labelnumberlist = set(labelnumber)
return labelnumberlist
# 创建文件夹
def createfilefloder(fname):
path = 'C:/Users/sinyjam/Desktop/xingzuotu2/' # 设置创建后文件夹存放的位置
for i in labellist(fname): # 这里创建类别个数个文件夹
# *定义一个变量判断文件是否存在,path指代路径,str(i)指代文件夹的名字*
isExists = os.path.exists(path + str(i))
if not isExists: # 判断如果文件不存在,则创建
os.makedirs(path + str(i))
print("%s 目录创建成功" % i)
else:
print("%s 目录已经存在" % i)
continue # 如果文件不存在,则继续上述操作,直到循环结束
# 读取文件并且复制文件到相应的文件夹,
# 这里的fname2不能是全路径到jpg,最后是文件夹"/"结尾
# C:/Users/sinyjam/Desktop/xingzuotu
def readImgAndSave(fname2):
ls = os.listdir(fname2)
for i in ls:
print(i)
istr = i.split(".")[0]
label = istr.split("-")[0]
dst = os.path.join(destination_path, label)
new_image = os.path.join(dst, i)
# print(istr)
# print(label)
if not os.path.exists(new_image):
shutil.copy(fname2 + '/' + i, destination_path + '%s' % label + '/')
else:
images = os.listdir(dst)
max_serial = -1
for im in images:
_, serial_num = im.split('-')[0], im.split('-')[1]
theNum = re.compile('0*([1-9][0-9]*)').findall(serial_num)[0]
max_serial = max(max_serial, int(theNum))
max_serial += 1
new_name = label + '-' + str(max_serial).zfill(4) + '.jpg'
new_file_path = os.path.join(dst, new_name)
shutil.copy(fname2 + '/' + i, new_file_path)
# 转RGB
def ChangeToRgb(fname):
for infile in glob.glob(source_path):
# file为前面的所有路径,ext为.jpg,拼在一起是一个完整的路径
file, ext = os.path.splitext(infile)
Img = Image.open(infile)
# 看图片类型。是不是我们要的RGB,不是就转换成RGB
print(Img.mode, file)
if Img.mode != 'RGB':
Img = Img.convert('RGB')
source_path = "C:/Users/sinyjam/Desktop/xingzuotu/*.jpg"
source_pathf = "C:/Users/sinyjam/Desktop/xingzuotu/"
destination_path = "C:/Users/sinyjam/Desktop/xingzuotu2/"
imglist = glob.glob(source_path)
ChangeToRgb(source_path)
# 类别数print(labelnum(imglist))
# 根据类别数创造文件夹
createfilefloder(labelnum(imglist))
# 打印list里有哪些
# print(labellist("C:/Users/sinyjam/Desktop/xingzuotu/*.jpg"))
readImgAndSave(source_pathf)
简化版代码:
import os
import re
from shutil import copyfile
import shutil
source_path = r'C:\Users\sinyjam\Desktop\aaa'
destination_path = r'C:\Users\sinyjam\Desktop\aaa3'
#返回文件名
images = os.listdir(source_path)
print(images)
num = 0
for i in images:
category, name = i.split('-')[0], i.split('-')[1]
src = os.path.join(source_path, i)
dst = os.path.join(destination_path, category)
new_image = os.path.join(dst, i)
if not os.path.exists(dst):
os.mkdir(dst)
continue
elif not os.path.exists(new_image):
shutil.copy(src, new_image)
else:
images = os.listdir(dst)
max_serial = -1
for im in images:
_, serial_num = im.split('-')[0].strip(), im.split('-')[1].strip()
theNum = re.compile('0*([1-9][0-9]*)').findall(serial_num)[0]
max_serial = max(max_serial, int(theNum))
max_serial += 1
new_name = category + '-' + str(max_serial).zfill(4) + '.jpg'
new_file_path = os.path.join(dst, new_name)
shutil.copy(src, new_file_path)