在做数据集的过程中,有时候需要将大图进行切分成小图片,一方面是为了满足训练需要,一方面是为了扩增数据集。
如下图的尺寸为5472x3648,但是我用不着这么大的图片,需要将图9等分
市面上也有等分切割图片的软件或者网站,但是我比较懒,又想批量处理,所以这里分享一个等分切割图片的方法。
import os
from PIL import Image
# 源图片存储路径,这里我用了三张图片作为测试,其实几张都一样啦
path_img = r'test_input' # 需要切片图的路径
img_dir = os.listdir(path_img) # 获取文件夹包含的文件或文件夹的名字的列表
print(img_dir)
print(len(img_dir)) # 打印一下获取到的文件数量
for i in range(len(img_dir)):
# 获取初始图片名作为id
id = img_dir[i].split('.')[0] # 这里是为了获取图片的名字
img = Image.open(path_img + '/' + img_dir[i]) # 读取图片
size_img = img.size
print(size_img) # 获取图片的尺寸
# 将图片切割成9张小图片,下面代码中的3是9开根号,比如你想分割25成张小图片,写成5就好了
weight = int(size_img[0] // 3)
height = int(size_img[1] // 3)
for j in range(3):
for k in range(3):
box = (weight * k, height * j, weight * (k + 1), height * (j + 1)) # 定切片的区域
region = img.crop(box) # 按照上述的区域分割图片
# 输出路径
region.save('test_output\\''{}-{}{}.png'.format(id, j, k))
看一下打印的输出
['100_0019_0141.JPG', '100_0019_0142.JPG', '100_0019_0143.JPG']
3
(5472, 3648)
(5472, 3648)
(5472, 3648)
再看看输出的效果
可以看到已经将三张图片切割成了27张图,切割完成的图片尺寸也是正常的