一些基于python的批量处理方法2

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])

我通过计算,先获取整个图片的大小,然后根据图片中小图片(我要裁剪下的图片)数量,计算出要裁剪的黑边的元素位置。当然,我事先要知道我要裁剪下小图片的大小应该是多少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值