python 批量转ppm为JPG

先单独转一张

from PIL import Image
img = Image.open(r"img\00866.ppm")
img.save(r"img\00866.jpg")

再批量转一下

可能会有一点点小问题
我的图片都在一个文件夹,直接定位到那个文件夹,输出定位到另外一个文件夹
这里对这个https://blog.csdn.net/weixin_41695564/article/details/80292556进行了修改

# -*- coding: utf-8 -*-

import os

# import tensorflow as tf

import numpy as np

import PIL

# import matplotlib.pyplot as plt

# import cv2


def get_files(file_dir):
    """

        Loads a data set and returns two lists:

        images: a list of Numpy arrays, each representing an image.

        labels: a list of numbers that represent the images labels.

    """

    directories = [file for file in os.listdir(file_dir) if not os.path.isdir(os.path.join(file_dir, file))]
    print(directories)

    # os.listdir()方法用于返回指定的文件夹包含的文件或文件夹的名字的列表

    # directories是一个列表,部分如下所示:

    # ['00000', '00001', '00002', '00003', '00004', '00005', '00006', '00007',

    # '00008', '00009', '00010', '00011', '00012', '00013', '00014', '00015',

    # ...

    images = []

    # labels = []

    for files in directories:

        # data_dir = os.path.join(file_dir, files)
        data_dir = file_dir

        # data_dir列表部分展示如下所示:

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training\Training\00000

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training\Training\00001

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training\Training\00002

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training\Training\00003

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training\Training\00004

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training\Training\00005

        # ...

        file_names = [os.path.join(data_dir, f) for f in os.listdir(data_dir) if f.endswith(".ppm")]
        print(file_names)

        # filenames是一个列表,其部分展示如下所示:

        # ['E:\\DataSet\\BelgiumTS\\BelgiumTSC_Training\\Training\\00000\\01153_00000.ppm',

        # 'E:\\DataSet\\BelgiumTS\\BelgiumTSC_Training\\Training\\00000\\01153_00001.ppm',

        # 'E:\\DataSet\\BelgiumTS\\BelgiumTSC_Training\\Training\\00000\\01153_00002.ppm',

        # ...

        # For each label, load it's images and add them to the images list.

        # And add the label number (i.e. directory name) to the labels list.

        for f in file_names:
            images.append(f)

            # labels.append(int(files))

    # print(images)

    # print(labels)

    # images是由每幅ppm格式图像的绝对路径组成的列表,如下所示:

    # ['E:\\DataSet\\BelgiumTS\\BelgiumTSC_Training\\Training\\00000\\01153_00000.ppm',

    #  'E:\\DataSet\\BelgiumTS\\BelgiumTSC_Training\\Training\\00000\\01153_00001.ppm',

    # 'E:\\DataSet\\BelgiumTS\\BelgiumTSC_Training\\Training\\00000\\01153_00002.ppm',

    # ...

    #  labels是由每幅图像的类别标签组成的列表,如下所示:

    # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,

    # 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    # ...

    return images


# def change_jpg(images, flag):
def change_jpg(images):

    """

    这个程序批量将所有的ppm格式的图像文件转换成jpg的格式,然后批量保存在指定的路径下

    """

    for i in range(len(images)):

        # 遍历每一个ppm格式图像文件所在的绝对地址

        address_list = images[i].split("\\")

        #  切分每一个绝对地址,获得一个列表,输出如下所示

        # ['E:', 'DataSet', 'BelgiumTS', 'BelgiumTSC_Training', 'Training', '00000', '01153_00000.ppm']

        # ['E:', 'DataSet', 'BelgiumTS', 'BelgiumTSC_Training', 'Training', '00000', '01153_00001.ppm']

        # ['E:', 'DataSet', 'BelgiumTS', 'BelgiumTSC_Training', 'Training', '00000', '01153_00002.ppm']

        # ['E:', 'DataSet', 'BelgiumTS', 'BelgiumTSC_Training', 'Training', '00000', '01160_00000.ppm']

        # ...

        img = PIL.Image.open(images[i])

        # if flag == 0:

        root_dir = r'D:\dataset\ppm_jpg300'#

        # elif flag == 1:
        #
        #     root_dir = 'E:\\DataSet\\BelgiumTS\\BelgiumTSC_Testing_jpg'

        # flag ==0表示对训练集进行转换,flag ==1表示对测试集进行转换

        tail = address_list[-1].split(".")[-2] + ".jpg"

        # 每一幅图像重新保存的文件名,输出如下:

        #  01153_00000.jpg

        #  01153_00001.jpg

        #  01153_00002.jpg

        #  01160_00000.jpg

        #  ...

        new_dir = os.path.join(root_dir, address_list[-2], tail)

        # 获得用于每一幅图像另存的的新绝对路径,输出如下:

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000\01153_00000.jpg

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000\01153_00001.jpg

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000\01153_00002.jpg

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000\01160_00000.jpg

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000\01160_00001.jpg

        path = os.path.join(root_dir, address_list[-2])

        # 用于创建上级文件夹,输出如下:

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000

        # E:\DataSet\BelgiumTS\BelgiumTSC_Training_jpg\00000

        if not os.path.exists(path):
            os.makedirs(path)

        # 判断路径是否存在,不存在就先创建路径

        img.save(new_dir, 'JPEG')


if __name__ == '__main__':
    train_data_dir = r'D:\dataset\ppm300'# D:\\dataset\\TestIJCNN2013\\TestIJCNN2013Download

    # test_data_dir = 'E:\\DataSet\\BelgiumTS\\BelgiumTSC_Testing\\Testing'

    train_images= get_files(train_data_dir)

    # test_images, test_labels = get_files(test_data_dir)

    change_jpg(train_images)

    # change_jpg(test_images, flag=1)

    print("****训练集的信息:******")

    # print("Unique Labels:%d \nTotal Images: %d" % (len(set(train_labels)), len(train_images)))

    # print("****测试集的信息:******")
    #
    # print("Unique Labels:%d \nTotal Images: %d" % (len(set(test_labels)), len(test_images)))
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值