python批量图像裁剪处理
场景
我通过vae生成了一些图像文件。这些图像拼接在一起,我想将他们分割下来。
图片大概类似这样的
这样的图片文件夹中还有很多。我需要一种批量处理的方法提高效率,并且手动分割太麻烦了!
from PIL import Image
import os
import glob
folder_path = 'F:/dataSet/samples/'
############################################获取数据集文件夹名称############################################
# 获取文件夹下所有文件名称
names = os.listdir(folder_path)
# 遍历所有名称,获取文件夹名称
folder_names = []
for name in names:
if os.path.isdir(os.path.join(folder_path, name)):
folder_names.append(name)
print(folder_names)
folder_names_str = ''.join(folder_names)
'''文件夹名称'''
############################################获取文件夹下所有图片.png############################################
# 获取文件夹中所有 PNG 图片的路径
png_paths = glob.glob(os.path.join(folder_path, '*.png'))
png_name = []
# 遍历所有 PNG 图片,输出图片名
for png_path in png_paths:
png_Name = os.path.basename(png_path)
png_name.append(png_Name)
#print(png_name)
############################################裁剪图片算法############################################
# 打开原始图片
def crop_img(img_name,name_num):
imgpath = folder_path+img_name
img = Image.open(imgpath)
width, height = img.size #540,134
print('Image size: {}x{}'.format(width, height))
# 图片行数
pic_width = 8
# 图片列数
pic_height = 6
# 图片黑边数
num_black_width = pic_width+1
num_black_height = pic_height+1
# 大图片中,小图片的布局为:
# 黑边,小图片,黑边,小图片,黑边,小图片,黑边,小图片,黑边
# 因此我们需要计算出黑边的宽度和高度,以及小图片的宽度和高度
# 小图片宽高
small_pic = 64
# 黑边宽高
black_width = (width - pic_width*small_pic)/num_black_width
black_height = (height - pic_height*small_pic)/num_black_height
# 切割小图片
print("开始切割图片")
for i in range(pic_height):
for j in range(pic_width):
# 此公式为推导而出
box = ((j+1)*black_width+j*small_pic, (i+1)*black_height+i*small_pic, (j+1)*black_width+(j+1)*small_pic,(i+1)*black_height+(i+1)*small_pic)
small_img = img.crop(box)
small_img.save('F:/dataSet/pointdatasetbypng/vaepic/palm up/{}{}.png'.format(folder_names_str,name_num))
name_num += 1
for i in range(15,31):
name_num = 401+(i-15)*48#三通道为16
crop_img(png_name[i],name_num)
#crop_img(png_name[17])
我通过计算,先获取整个图片的大小,然后根据图片中小图片(我要裁剪下的图片)数量,计算出要裁剪的黑边的元素位置。当然,我事先要知道我要裁剪下小图片的大小应该是多少。