参考文章:https://blog.csdn.net/m0_37592397/article/details/80372009
https://blog.csdn.net/zhili8866/article/details/53026269
一.图像批量重命名
图像进行批量重命名的时候要保证数字位数相同,比如00,01,02,03不能使用0,1,2,3,10,11,12,13.因为python会通过第一位数比较,这样排列之后的顺序会变为0,1,10,11,12,13,2,3
import os
class BatchRename():
# 批量重命名文件夹中的图片文件
def __init__(self):
self.path = 'C:\\Users\\Tony.Hsu\\Desktop\\DATA\\0' # 表示需要命名处理的文件夹
def rename(self):
filelist = os.listdir(self.path) # 获取文件路径
total_num = len(filelist) # 获取文件长度(个数)
i = 1 # 表示文件的命名是从1开始的
for item in filelist:
if item.endswith('.bmp'): # 初始的图片的格式为bmp格式的(或者源文件是png格式,jpg格式及其他格式,后面的转换格式就可以调整为自己需要的格式即可)
src = os.path.join(os.path.abspath(self.path), item)
dst = os.path.join(os.path.abspath(self.path), '0_'+format(str(i), '0>2s') + '.bmp')
# 处理后的格式也为jpg格式的,当然这里可以改成png格式
# dst = os.path.join(os.path.abspath(self.path), '0000' + format(str(i), '0>3s') + '.jpg')
# 这种情况下的命名格式为0000000.jpg形式,可以自主定义想要的格式
try:
os.rename(src, dst)
print('converting %s to %s ...' % (src, dst))
i = i + 1
except:
continue
print('total %d to rename & converted %d bmps' % (total_num, i))
if __name__ == '__main__':
demo = BatchRename()
demo.rename()
二.图像批量灰度化
from PIL import Image
import os
# 转换为灰度图像程序
input_dir = 'C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\wholeData'
# input_dir = 'C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\trainingSet'
# input_dir = 'C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\testingSet'
out_dir = 'C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\wholeDataGray'
# out_dir = 'C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\trainingSetGray'
# out_dir = 'C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\testingSetGray'
a = os.listdir(input_dir)
for i in a:
print(i)
I = Image.open(input_dir + '\\' + i)
L = I.convert('L')
L.save(out_dir + '\\' + i)
三.图像批量移动
# 深度学习过程中,需要制作训练集和验证集、测试集。
import os
import random
import shutil
'''
def moveFile(fileDir):
pathDir = os.listdir(fileDir) # 取图片的原始路径
filenumber = len(pathDir)
rate = 0.75 # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
picknumber = int(filenumber*rate) # 按照rate比例从文件夹中取一定数量图片
sample = random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片
print(sample)
for name in sample:
shutil.move(fileDir+name, tarDir+name)
return
if __name__ == '__main__':
fileDir = "C:\\Users\\Tony.Hsu\\Desktop\\DATA\\0" #源图片文件夹路径
tarDir = 'C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\trainingSet' #移动到新的文件夹路径
moveFile(fileDir)
'''
# 取前35个放到训练集文件夹,后五个放到测试集文件夹
path = "C:\\Users\\Tony.Hsu\\Desktop\\DATA\\9"
# new_path = "C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\wholeData"
new_path = "C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\testingSet"
# new_path = "C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\trainingSet"
count = 0
for file in os.listdir(path):
# print(file)
full_file = os.path.join(path, file)
new_full_file = os.path.join(new_path, file)
shutil.copy(full_file, new_full_file)
print(count)
# 将1-35复制到训练集文件夹
if count == 34: # 从0开始计数,所以为34
print("done!")
break
count += 1
'''
将36-40复制到测试集文件夹
if count > 34:
print(count)
shutil.copy(full_file, new_full_file)
count += 1
'''
print("complete!")
四.批量转为数组
def get_imlist(path): # 此函数读取特定文件夹下的bmp格式图像
return [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.bmp')]
c1 = get_imlist("C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\trainingSetGray")
print(c1) # 这里以list形式输出bmp格式的所有图像(带路径)
d1 = len(c1) # 这可以以输出图像个数
print(d1)
dataTrain = np.empty((d1, 20*36)) # 建立d*(20*36)的矩阵
while d1 > 0:
img1 = Image.open(c1[d1-1]) # 打开图像
# img_ndarray=numpy.asarray(img)
img_ndarray = np.asarray(img1, dtype='float64')/256 # 将图像转化为数组并将像素转化到0-1之间
dataTrain[d1-1] = np.ndarray.flatten(img_ndarray) # 将图像的矩阵形式转化为一维数组保存到dataTrain中
d1 = d1-1
print(dataTrain)
# A = numpy.array(data[0]).reshape(28, 28) # 将一维数组转化为矩28*28矩阵
# print A
# savetxt('num7.txt',A,fmt="%.0f") #将矩阵保存到txt文件中