webp是谷歌发行的一种不损伤图像质量的压缩存储方式,可有效减小图像数据存储空间。

但是在神经网络中,常用的输入图像格式为jpg,所以需要转化,利用PIL库

一、单张图像处理


import os
from PIL import Image
path = “E:\\newdatas\\data\\try\\991.webp”
im=Image.open(path)
im.load()
im.save(“E:\\newdatas\\data\\try\\991.jpg”)
os.remove(path)

我的运行环境是win10,所以图像路径格式采用双斜线或反斜线,运行脚本,可将该图像转化为jpg格式的文件存储,并且删除原图像。

代码解析:

PIL是python的第三方图像处理库。

Image.open(path)是读取图像,但是该操作不读取图像数据,因此如果需要对图像做处理,需要再使用Image.load()来强行加载图像数据。

使用im.save()保存图像,可直接将图像保存成需要的格式。(不放心的话,可以再读取一下重新保存的图像,输出其format属性,验证一下是否是jpeg)

保存完之后删除原图像,直接使用os.remove()函数

二、批量处理

import os
from PIL import Image

#图像预处理包括修改图像格式、编号
class proimage():
    def __init__(self): 
        self.path = "E:\\newdatas\\data\\try"
    
    #读取文件夹下图像
    def read(self):
        filelist=os.listdir(self.path)
        return filelist

    def webp2jpg(self,filelist):
        #查找图像方式不同,该函数只查找所有.webp格式的文件
        for item in filelist:
             if item.endswith(\'.webp\') :                 
                  src = os.path.join(os.path.abspath(self.path), item)
                  print("src=",src)
                  im=Image.open(src)
                  im.load()
                  save_name=src.replace(\'webp\',\'jpg\')
                  im.save(\'{}\'.format(save_name),\'JPEG\')
                  os.remove(src)               

if __name__ == \'__main__\':
    newtype = proimage()
    filelist=newtype.read()
    newtype.webp2jpg(filelist)

三、PNG格式修改为jpg

PNG是一种无损压缩的位图片格式,其通道数=4,除了R,G,B外,还有一个透明度,因此在修改其格式为jpg时,需要放弃透明度通道。

因此思路是读取图像,获取图像通道,将通道merge为rgb,图像另存为jpg格式。

def png2jpg(self,filelist):
        for item in filelist:
            if item.endswith(".png"):
                src=os.path.join(os.path.abspath(self.path), item)
                im=Image.open(src)
                im.load()
                #print("原图像通道数=\'{}\'".format(len(im.split())))
                r,g,b,a=im.split()
                im=Image.merge("RGB",(r,g,b))
                #print(\'现图像通道数=\',len(im.split()))
                save_name=src.replace("png","jpg")
                im.save(\'{}\'.format(save_name),\'JPEG\')
                os.remove(src)

四、图像编号

为较好的用于深度学习,需要将图像按照顺序进行编号,代码如下

def rename(self,filelist):
        i=1542
        for item in filelist:
            if item.endswith(\'.jpg\') or item.endswith(\'.jpeg\') or item.endswith(\'.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>3s\') + \'.jpg\')
                os.rename(src,dst)
                #print(\'converting %s to %s ...\' % (src, dst))
                i=i+1

 

    使用时请注意修改文件路径和编号初始值

版权声明:本文为wmy-ncut原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wmy-ncut/p/12158553.html1