今天随便分享一个,图片批量分割的代码,把图片分割成四等份,多用于扩增数据集用,
也可以再还原回去。
代码如下:
from PIL import Image
dir = './1111.jpg' #当前图片路径
image = Image.open(dir) #读入当前图片
img = image.convert('RGB') #转换成RGB三通道格式
w = img.size[0] #获取图片宽度
h = img.size[1] #获取图片高度
img_1 = img.crop([0, 0, w/2, h/2]) #获取左上1/4的图片
img_1.save('./' + '1' + '.jpg') #保存在本地图片命名为1.jpg
img_2 = img.crop([w/2, 0, w, h/2]) #获得右上1/4的图片
img_2.save('./' + '2' + '.jpg') #保存在本地图片命名为2.jpg
img_3 = img.crop([0, h/2, w/2, h]) #获取左下1/4的图片
img_3.save('./' + '3' + '.jpg') #保存在本地图片命名为3.jpg
img_4 = img.crop([w/2, h/2, w, h]) #获取右下1/4的图片
img_4.save('./' + '4' + '.jpg') #保存在本地图片命名为4.jpg
我们我这里代码为1.py, 原图是1111.jpg的猫图片,被分成了4个等分,那么如何还原回去那,
代码如下:
#4个图像拼接成一个
target = Image.new('RGB', (w, h)) # 首先创建一块背景布
for i in range(0,4): #循环4次拼接图片
print(i)
if i == 0:
location = (0, 0) #放置位置在左上
target.paste(img_1, location)
if i == 1:
location = (w//2, 0) #放置位置在右上
target.paste(img_2, location)
if i == 2:
location = (0, h//2) #放置位置在左下
target.paste(img_3, location)
if i == 3:
location = (w//2, h//2) #放置位置在右下
target.paste(img_4, location)
target.save("./2222.jpg")
可以看到图片2222.jpg是完美的还原回去了
那么最后再教一下如何批量对图片分割成4等分把
比如你现在在一个文件夹下,有如果子文件夹,每个文件夹里面又有若干个图片
输入代码如下:
import os
from PIL import Image
b = 0
dir = './1/' #目录文件夹名称
files = os.listdir(dir)
files.sort()
while(b < 1):#1是因为目录文件夹下只有一个子文件夹,要是对多个文件夹图像批量处理,只要改成相应数目即可
#这里采用的是判断文件名的方式进行处理
ss = './1/' + str(files[b]) + '/' #训练图片
pics = os.listdir(ss) #得到1文件下所指文件内的图片
i = 1
for each_bmp in pics: # 遍历,进行批量转换
first_name, second_name = os.path.splitext(each_bmp)
each_bmp = os.path.join(ss, each_bmp)
image = Image.open(each_bmp)
img = image.convert('RGB')
w = img.size[0] #获取图片宽度
h = img.size[1] #获取图片高度
img_1 = img.crop([0, 0, w/2, h/2]) #获取左上1/4的图片
img_1.save(ss + str(i) + '.jpg') #保存在本地图片命名为1.jpg
i += 1
img_2 = img.crop([w/2, 0, w, h/2]) #获得右上1/4的图片
img_2.save(ss + str(i) + '.jpg') #保存在本地图片命名为2.jpg
i += 1
img_3 = img.crop([0, h/2, w/2, h]) #获取左下1/4的图片
img_3.save(ss + str(i) + '.jpg') #保存在本地图片命名为3.jpg
i += 1
img_4 = img.crop([w/2, h/2, w, h]) #获取右下1/4的图片
img_4.save(ss + str(i) + '.jpg') #保存在本地图片命名为4.jpg
i += 1
os.remove(ss + first_name + '.jpg') #图片被分割4等分之后,删除原图片
b += 1
处理结果
还是很简单的吧,如果有打赏的话,将会大大加快小弟更新速度,在这谢过各位大爷。
|