话不多说,上代码。
# 每个txt文件代表一张图片,txt文档中每行就是此图片中要截取的坐标。根据坐标截取小图片存放于images文件夹中
import os
# 需要遍历的文件夹名
txt_dir = 'result' # 坐标文件夹名,
pic_dir = 'pic' # 图片存放文件夹名
# root为文件夹的名字,dirs , files为由文件夹内的每个文件的名称组成数组
for pic_root, pic_dirs, pic_files in os.walk(pic_dir): # 将图片文件夹下的图片弄成数组存储到pics中
pics = pic_files
for txt_root, txt_dirs, txt_files in os.walk(txt_dir): # 将坐标文件夹下的各个文本文件弄成数组存储到txts中
txts = txt_files
# 计数器 a表示第几个文本文件
a = 0
for file in txts:
b = 0 # b表示每个文本文件中的第几行
f = open('result/' + file, 'r') # 读取txt文件里的内容
txt = f.readlines() # 将内容转化为数组的形式,一行为一个元素
# print(txt)
for i in txt:
t = i.split(",") # 将一行中的坐标信息按','分割成一个新的数组
# 把相应的坐标转化为以左上角为原点的四个边框的位置,并把字符串转化为整数型
left = int(t[0]) # left = x1 = x4 = t[0] = t[6]
upper = int(t[1]) # upper = y1 = y2 = t[1] = t[3]
right = int(t[2]) # right = x2 = x3 = t[2] = t[4]
lower = int(t[5]) # lower = y3 = y4 = t[5] = t[7]
from PIL import Image
img = Image.open("pic/" + pics[a]) # 图片打开地址
# print(img.size) # 输出图片的大小
cropped = img.crop((left, upper, right, lower)) # (left, upper, right, lower)
cropped.save("images/" + str(a + 1) + "_" + str(b + 1) + ".png") # 保存地址 保存名字
b = b + 1
f.close() # 关闭文件
a = a + 1