由于最近做一些图像处理有关的学习任务,需要对图片进行预处理,对准格式(统一尺寸,转换通道数,重命名)。在这个过程中遇到了好多问题,查找了一些资料,最终解决了这些问题;
废话不多说,直接上代码(新手,注释有点多):
"这里对图像的预处理包括:同一名称,统一尺寸,统一通道数;"
from PIL import Image
import os
def rename_image(file_dir, name):
'''将网上爬下来的图片重命名(更好的观看)'''
'''第一个参数是目标文件名;
第二个参数是图片的名称'''
i = 0
print("正在重命名图片。。。。。。。")
for file in os.listdir(file_dir):
'''获取该路径文件下的所有图片'''
src = os.path.join(os.path.abspath(file_dir), file)
'''修改后图片的存储位置(目标文件夹+新的图片的名称)'''
dst = os.path.join(os.path.abspath(file_dir), name + str(i) + '.png')
os.rename(src, dst) # 将图片重新命名
i = i + 1
print("-----------重命名完毕-----------")
def process_image_channels(image_path): #将4通道,A通道的统一成三通道的图像;
# process the 4 channels .png
print("正在转换图片通道数。。。。。。。")
for img_name in os.listdir(image_path):
img_path = image_path + "/" + img_name # 获取该图片全称
image = Image.open(img_path) # 打开特定一张图片
image = image.resize((64, 64)) # 设置需要转换的图片大小
if image.mode == 'RGBA':
r, g, b, a = image.split()
image = Image.merge("RGB", (r, g, b))
os.remove(img_path) # 用新生成的3通道的图片代替原来的;
image.save(img_path)
#print("这是个四通道的,处理完了!")
# process the 1 channel image
elif image.mode != 'RGB':
image = image.convert("RGBA")
r, g, b, a = image.split()
image = Image.merge("RGB", (r, g, b))
os.remove(img_path)
image.save(img_path)
#print("这是个A通道的,处理完了!")
print("-----------通道数变换完毕-----------")
# size输入形式举例(记得加括号): (64, 64)
def image_reshape(image_path, size):
print("正在统一图片尺寸。。。。。。。")
for img_name in os.listdir(image_path):
img_path = image_path + "/" + img_name # 获取该图片全称
image = Image.open(img_path) # 打开特定一张图片
image = image.resize(size) # 设置需要转换的图片大小
os.remove(img_path)
image.save(img_path)
print("-----------尺寸统一完毕-----------")
if __name__ == '__main__':
image_path = "icon"
print("ready for process ---------- ")
# 重命名;
rename_image(image_path, 'icon_')
# 统一通道数;
process_image_channels(image_path)
# 统一尺寸;
image_reshape(image_path, (64, 64))
在这个代码里面,我定义了三个函数,分别用来做名称,尺寸,通道;
中间遇到的问题有以下几个:
1.在循环文件夹的时候,会出现不能识别Thumbs.db文件的错误,这个需要把这个文件删除掉才行,这个是系统自己生成的文件,不是图片,会使代码报错,百度一下删除这个问价的方法(这个东西贼烦,我弄了好长时间);
这是我解决的方法:https://blog.csdn.net/weixin_41765699/article/details/82620542,
2.有时候会出现不是图片的文件,也是报错不能识别这个文件,也给他删除掉;