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()函数
二、批量处理
importosfrom PIL importImage#图像预处理包括修改图像格式、编号
classproimage():def __init__(self):
self.path= "E:\\newdatas\\data\\try"
#读取文件夹下图像
defread(self):
filelist=os.listdir(self.path)returnfilelistdefwebp2jpg(self,filelist):#查找图像方式不同,该函数只查找所有.webp格式的文件
for item infilelist: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格式。
defpng2jpg(self,filelist):for item infilelist: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)
四、图像编号
为较好的用于深度学习,需要将图像按照顺序进行编号,代码如下
defrename(self,filelist):
i=1542
for item infilelist: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
使用时请注意修改文件路径和编号初始值