引言
python切割图片有两种方法,分别是Pillow和OpenCV,因为我这部分的处理是基于我之前的python提取xml文件中的坐标点(labelimg标记文档)结果的前提下,将所有标注出来的小图都截取出来,labelimg标注的坐标格式跟pillow方法中的格式一致。因此本文基于Pillow的方法来截取小图。
代码
from PIL import Image
import os
img = Image.open("./blog.png")
print(img.size)
f = open('blog.txt')
k = 1
for line in f.readlines():
# print(line.split(',')[0])
x0 = int(line.split(',')[0])
y0 = int(line.split(',')[1])
x1 = int(line.split(',')[2])
y1 = int(line.split(',')[3])
cropped = img.crop((x0,y0,x1,y1)) # (left, upper, right, lower)
# cropped = img.crop((line)) # (left, upper, right, lower) # 直接放line,会报TypeError: type str doesn't define __round__ method
dir = './cut_img/'+str(k) + '.png'
cropped.save(dir)
k += 1
f.close()
结果
裁剪的图片如下图所示。
有一点需要注意的是,一开始太懒想把从文件中读到的数据直接传入img.crop()中,结果就会报TypeError的问题。这是因为crop方法中读入的数据是4个int数字,而line是一个字符串,所以还是要先转型一下再传入函数中。