当前位置:   article > 正文

PIL合成图片生成数据集_paste(region, box, mask)

paste(region, box, mask)
  1. from PIL import Image
  2. import random
  3. import numpy as np
  4. import os
  5. def Paste(img1,img2):
  6. # 加载底图
  7. base_img = Image.open(os.path.join('/home/lhq/PycharmProjects/untitled/datasets',img1))
  8. # 可以查看图片的sizemode,常见mode有RGB和RGBA,RGBA比RGB多了Alpha透明度
  9. # print base_img.size, base_img.mode
  10. # 加载需要P上去的图片
  11. tmp_img = Image.open(os.path.join('/home/lhq/PycharmProjects/untitled/yellow',img2))
  12. W,H,C = np.array(base_img).shape
  13. try:
  14. w = random.randint(1,W//2)
  15. h = random.randint(1,H//2)
  16. box = (w,h,w+100, h+100) # 底图上需要P掉的区域
  17. # 这里可以选择一块区域或者整张图片
  18. # region = tmp_img.crop((0,0,304,546)) #选择一块区域
  19. # 或者使用整张图片
  20. region = tmp_img
  21. # 使用 paste(region, box) 方法将图片粘贴到另一种图片上去.
  22. # 注意,region的大小必须和box的大小完全匹配。但是两张图片的mode可以不同,合并的时候回自动转化。如果需要保留透明度,则使用RGMA mode
  23. # 提前将图片进行缩放,以适应box区域大小
  24. region = region.resize((box[2] - box[0], box[3] - box[1]))
  25. region = region.rotate(random.randint(-45, 45)) # 对图片进行旋转
  26. base_img.save('dataset/{}.0.0.0.0.0.png'.format(img1.split('.')[0])) # 保存图片
  27. region = region.convert('RGBA')
  28. b,g,r,a = region.split()
  29. base_img.paste(region, box,mask=a)
  30. # base_img.show() # 查看合成的图片
  31. base_img.save('dataset/{}.{}.{}.{}.{}.1.png'.format(img1.split('.')[0],w,h,w+100,h+100,1)) #保存图片
  32. except:
  33. pass
  34. bj = os.listdir('/home/lhq/PycharmProjects/untitled/datasets')
  35. bj.sort(key=lambda x:int(x.split('.')[0]))
  36. for img1 in bj:
  37. qj = os.listdir('/home/lhq/PycharmProjects/untitled/yellow')
  38. for img2 in qj:
  39. Paste(img1,img2)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/798113
推荐阅读
相关标签
  

闽ICP备14008679号