图像处理(批量重命名,批量转为灰度图,批量移动,批量转为数组)

参考文章: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文件中
发布了13 篇原创文章 · 获赞 2 · 访问量 1831

猜你喜欢

转载自blog.csdn.net/SouthWooden/article/details/99310562