python根据四点坐标截取图片

话不多说,上代码。

# 每个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

python根据四点坐标截取图片_第1张图片

 

你可能感兴趣的:(python)